java类集浅谈

      昨天写了一篇谈谈反射,发现概念性东西太多,代码类的东西太少了,都知道搞IT的上网百度一般都是解决问题的时候,只有在救急的时候才会发现知识是如此的性感,所以今天的文档决定在概念的基础上加上代码,这样就能往实用型文档靠靠边,如果你在解决问题的时候有幸搜到了我的文档那也说明是件好事。

    今天我们要谈谈类集,编程无非就是用语言去完成需求,而需求其实一般都离不开纷繁复杂的数据,所谓大数据时代,未来的一切将由数据说话,所以正确的处理数据显得格外重要。今天说的类集就是处理某类数据的方法,凡事脑子里先有个概念,然后再放到具体情况下具体分析。什么是类集?类集就是一个动态的对象数组,本身不受对象数组的长度限制。不同的对象数组有不同的类集框架对应,这些框架被设计成一组组标准接口,通过继承接口的子接口实现对象数组的增删改查。常用的类集接口用表格来表示(csdn的编辑器没有箭头符号,将就看看):                                                                                           

                                                   

                                Collection             Map
 List    SetQueueSortedSet     SortedMap

类集家的家谱是这样的→:

public interface Collection<E> extends Iterable<E>:我是德高望众的爸爸,我有一个兄弟叫Map,他是一个神通广大的老家伙,有很多房产,很多钥匙和屋子。

public interface List<E> extends Collection<E>:我是儿子,我扩充了爸爸没有的方法,包括返回指定位置的元素get(int index)、查找指定元素的位置indexOf(Object o)。我有好几个兄弟,有一个叫Set,他不喜欢韩国的女人因为长得都一样,而我则海纳百川。Set他也有自己的小孩,一个从来不打扫房间的HashSet和一个做事井井有条的TreeSet。还有一个低调得兄弟叫Queue。我有三个很看中的儿子ArrayList、Vector、LinkedList,他们实现了我的方法,每个儿子特点都不一样,让我通过例子来一一说说:

ArrayList:

*增加一个类集的数据

List<String> allList =new ArrayList<String>();//类的多态性:子类可自动向上转为父类

allList.add("hello");

Collection<String> allCollection=new ArrayList<String>();

allCollection.add("haha");对立面→ →allList.remove("haha")

allCollection.add("hehe");

allList.addAll(allCollection);

System.out.println(allList);

*一个一个输出

for(int i=0;i<allList.size();i++){

      System.out.println(allList.get(i));

}

*把结果放在对象数组里

String str[]=allList.toArray(new String[] {});

LinkedList:

是一种链表的操作类,同时继承了List和Queue接口。有其特有的方法找到表头element()、在链表开头增加元素addFirst(E o)、在链表结尾增加元素addLast(E o)、删除并显示元素poll(),使用类似ArrayList就不贴代码了。

注意:Set接口不允许添加重复的元素这个说法其实不准确,准确的说是允许add,但是只有一次add()是有效的;他的有序子类TreeSet可以实现排序,但前提是排序的对象是有排序规则的,并且是继承了comparable接口才可以。

Map:

public interface Map<K,V>

map中常用的获取元素方法跟他兄弟List是一样的get(Object key),但是添加元素的方法变掉了,变成了public V put(K key,V value)

实现map接口的常用子类有HashMap、TreeMap

Map=new HashMap<String,String>();

Set<String> keys=map.keySet();//获取所有的key值

Collection<String> values=map.values();//获取所有的value值

for(Map.Entry<String,String> me:map,entrySet()){

     System.out.println(me.getKey()+"--->"+me.getValue());//同时获取key和value值

Iterator<String> iter=keys.iterator();

while(iter.hasNext()){

        String str=iter.next();

       System.out.print(str);

}

小惊喜:看了几个常用类集接口的方法,可能会发现这里面没有涉及到对象的交换、替换、检索、排倒序等方法,如果自己去实现的话需要写一些代码比较繁琐,java提供了一个Collections工具类,该类下的方法帮助我们实现了这些功能。

 

类集的应用场景:

作为处理数据的类集,难免会碰到与数据库一样的关系模式,如何用代码实现一对多、多对多的E-R模式?

比如一个学校有多个学生,一个学生属于一个学校重点实现部分就在:

public class Student{

          private School school;

         public School getSchool(){

                    return school;

         }

         public School setSchool(){

                  this.school=school;

          }

           其他学校自己的属性和方法省略;

}

public class School{

      private List<Student>  stu;

     public School(){

             this.stu= new ArrayList<Student>();

}

 

好了,罗里吧嗦了一堆终于把类集大概讲了一些,总结一下就是类集家族里的各个成员如果添加、删除、查找自己的对象的一个过程,除了Map很另类,其他的方法都大致相同,使用的时候记不住了就多去翻翻书查查,相信这个部分会成为你工具书中的一部分。

 

 

 

                       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值