java集合Collection

目录

Collection:单例集合,存储一个一个的对象

1、List:存储有序的,可重复的数据;        -->"动态"数组

1.1   Collection常用方法:List、Set  继承了Collection所有方法

1.2   经典面试题:​

1.3   使用迭代器Iterator接口遍历集合元素;

1.4   foreach:用于遍历集合或数组:

1.5   ArrayList        LinkList        Vector的异同:

1.6   ArrayList源码分析:

1.7   LinkList源码分析:

1.8   Vector源码分析:

2、Set:存储无序的,不可重复的数据;

2.1:注意事项:

2.2   HashSet   LinkedHashSet   TreeSet  的区别:

2.2.1   HashSet:

2.2.2   面试题:

2.2.3   LinkHashSet

 2.2.4  TreeSet


Collection:单例集合,存储一个一个的对象

1、List:存储有序的,可重复的数据;        -->"动态"数组

Collection coll = new Collection();

1.1   Collection常用方法:List、Set  继承了Collection所有方法

           1)add(Object e)        将元素e添加到集合coll中,元素e为Object任何类型;

            2)addAll(Collection coll1)        将另一个集合(包括List和Set)coll1添加到coll中,添加集合操作;        

            3)size()        获取添加元素的个数;

            4)isEmpty()        判断集合元素是否为空;

            5)clear()        清空集合内元素;

            6)contains(Object e)        判断是否包含元素e,返回一个Boolean类型;

                  判断时使用equals而不是(==),如果没有重写equals等价于(==);

          7)containsAll(Collection coll1)   判断当前集合是否包含集合(List  Set)coll1中所有元素;

                新方法:Collection coll1 = Arrays.asList(List<T>);

          8)boolean remove(Object e)        从当前集合中删除对象e,返回一个boolean类型;

                删除成功返回true,失败返回false;修改了当前集合;

          9)removeAll(Collection coll1)        移除集合coll1中所有元素(所有共有元素);

                   contains 和 remove 都需要重写equals()方法;

          10)retainAll(Collection coll1)        求当前集合和集合coll1的交集,并返回给当前集合                                                                                                                         (修改了当前集合)        

          11)equals(Collection coll1)    判断当前集合和集合coll1是否相等,2集合顺序也必须相等;

         ·12)hashCode()        返回当前对象的哈希值;

           13)toArray()        把Collection类型转换成Object数组;

                                         相反:调用Arrays的静态方法      Arrays.asList(List<T>);

            14)iterator()        返回一个Iterator接口的实例,用于遍历集合元素;

 

1.2   经典面试题:

第一个输出:1、2        第二个输出:1、3;

区分        move(Object obj)     与     move(int index)

move()方法有2种参数,一个里面是Object类,一个是index类;要指定Object可以自动装箱;

1.3   使用迭代器Iterator接口遍历集合元素;

  Iterator对象常用方法:1)boolean hasNext()        判断是否有下一个元素;

     2)E next()        输出下一个元素;(泛型)  有2步操作:1指针下移,2返回下移以后集                                                                                                                      合位置上的元素;         

      3)remove()     可以在遍历的时候删除集合中的元素;和next()一样,删除指针对应的当前元                 素,此方法不同于集合中的remove()方法,这是迭代器中的remove()方法;

                如果一开始未调用next或者同一个指针对应的位置重复调用remove(),会报错;

1.4   foreach:用于遍历集合或数组:

        for(集合中元素的类型     局部变量 :集合对象) {}     

         内部实现使用迭代器;

1.5   ArrayList        LinkList        Vector的异同:

异:

同:3个类都实现了List接口,存储数据特点相同:存储有序的,可重复的数据   ;

1.6   ArrayList源码分析:

jdk7中:

jdk8中:

小节:

1.7   LinkList源码分析:

1.8   Vector源码分析:

使用较少,线程安全;

底层数组初始化为10,在add前就进行初始化,底层数组扩容为原来的2倍; 

2、Set:存储无序的,不可重复的数据;

2.1:注意事项:

        2.1.1  向Set中添加对象时,其所在的类一定要重写equals() 和 hashCode() 方法;

        2.1.2  重写的equals() 和 hashCode() 竟可能保存一致性,以实现相同对象相等规则:

                                                                                           即“相等的对象有相同散列码“

        2.1.3  重写2个方法小技巧:对象中用作equals()方法比较的Field,都应该用来比较hashCode()值;

2.2   HashSet   LinkedHashSet   TreeSet  的区别:

2.2.1   HashSet:

特点:

1.无序性:存储在底层数组的元素并不是按照数组索引的顺序添加,而是根据数据的哈希值决定;

2.不可重复性:保证添加的元素按照equals()判断时,不能返回True;即相同元素只能添加一个;

3.底层:数组加链表的形式;数组初始大小为16;

2.2.2   面试题:

 输出:    1001,“CC”;1002,"BB";

                1001,"CC";1002,"BB";1001,"CC";

                1001,"CC";1001,"BB";1001,"CC";1001,"AA"

2.2.3   LinkHashSet

        LinkHashSet作为HashSet的子类,在添加数据的同时,每个数据还记录了2个引用,来记录此数据前一个数据和后一个数据;

        优点:对于频繁地遍历操作,LinkHashSet比HashSet效率高; 

 2.2.4  TreeSet

1.向TreeSet中添加数据时,必须是相同对象的类;

2.两种排序:自然排序(实现CompareTo接口)和 定制排序 (Comparator);

3.自然排序中,比较2个对象是否相等比较为:comparerTo()返回0,不再是equals()方法;

 

定制排序:相当于把构造器当成参数放入TreeSet构造器中;

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值