JAVA 之"集合"

 1、集合其实可以看成为数组的扩展,它与数组的不同之处在于:

       《1》 一个数组只允许存储一种类型的数据,而一个集合可以存储任一种对象类型数据;

               简单的说一个集合类似一个 Object[] 数组,因为一切类的基类都为Object类,

                       所以一切类都可以隐式转换为Object类,然后存储到Object类型的数组中。

       《2》数组的大小为固定的,而集合的大小却可以根据数据的多少来自动增加或减小;

 

       《3》可以通过 泛型 <类型>  来使集合转换为类似数组的集合,如:

               List<String> list=new ArrayList<String>();

               该集合中就只能存储String类型的数据。

     

 2、集合中的接口与类,以及他们的关系:  

       《1》Collection接口:

 

             Collection(接口)
                        |


                /                 /
    List(接口)               Set(接口)
           |                             | 
      /        /                      /          /

ArrayList  LinkedList  HashSet  SortedSet
                                     |
                                  TreeSet

 

 

 

        《2》Map接口

 

                   Map(接口)


              /           |            /
 SortedMap   Hashtable   HashMap
              |           |
    TreeMap      Properties

 

 

3、各种集合类的特征:

      《1》list  有序排序的集合,可以有重复元素;

      《2》ArrayList :顺序表存储,用于多 查询 的数据存储;
      《3》LinkedList:链表存储,用于多 插入、删除 的数据存储;

      《4》set   无序排列的集合,不能有重复元素;

      《5》Map :  非线性排列,键值对存储(键唯一),<key>=<value>;
      《6》Hashtable:  键与值都不允许存 NULL值,线程安全;
      《7》HashMap:   键与值都允许存放 NULL 值,线程不安全。

 

4、集合中的 迭代器 Iterator :

       Iterator 用于迭代获取一个集合中的数据,类似于数组中for迭代:

      《1》数组中:有arr数组:

       for(int i=0;i<arr.length;i++){

           System.out.println(arr[i]);

       }

      《2》集合中:有list集合:

        Iterator it=list.iterator();
        while(it.hasNext()){
           System.out.println(it.next());
       }

 

       如果在arr与list中存储的数据一致,则《1》、《2》打印的效果一致;

       注意:在Iterator 中调用it.next()相当与在for中同时执行了arr[i] 和 i++;

                 所以当我们要打印一个user对象的name和age时,我们不能执行:

                 Iterator it=list.iterator();
                 while(it.hasNext()){
                   System.out.println(it.next().getName());

                   System.out.println(it.next().getAge());
                 }

                 正确代码为:

                 Iterator it=list.iterator();
                 while(it.hasNext()){

                   User user=it.next();
                   System.out.println(user.getName());

                   System.out.println(user.getAge());
                 }

 

 5、集合中元素的排序(这里只讲客户化排序即自定义排序):

      《1》定义排序规则:

            (1) 创建一个排序规则类实现 Comparator接口;

            (2) 在该类中重写compare方法,定义排序规则;

      《2》将集合排序:

            (1) List集合的排序:Collections.sort(list, c);

                  c为 排序规则类 的对象;

                 List  先插入数据,再按定义的规则排序;

            (2)TreeSet集合排序:Set set=new TreeSet(c) ;

                  c为 排序规则类 的对象;

                 TreeSet 先定义排序规则,再按规则插入数据;

 6、set 中去重复数据:

  虽然set不允许插入重复值,但由于set对对象是否重复是通过调用该对象中的equals

  方法来判断的,所以我们要重写该类中的equals方法(参见:equals详解),

  同时重写hashCode方法,使两个相同属性的对象返回相同的hashCode; 

 

     注意:由于TreeSet是先定义排序再插入数据的,所以当按排序规则排序后发现两个数据      

             的顺序相同,则将两个数据看成是重复的数据,则不插入,所以TreeSet中可以通 

             过排序规则来去重复数据。  

 7、实例代码:

 《1》List

       

 

《2》Set

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值