Collection的各子类小结

由前面的集合基础那篇博客中已经知道了collection类下有List和Set两个模块,此篇博客将List与Set中的一些关系和问题罗列一下,参照老师的笔记。

一、collection:

1、collection 和 collections 的区别

  • collection是上级接口,继承他的子类有List和Set;
  • collections是集合的工具类,提供一系列静态方法对集合的搜索、查找、同步操作;

2、Enumeration 和 Iterator 接口的区别:
Iterator代替了Enumeration接口,Enumeration是个旧的迭代器;
三点区别:

  • Iterator的方法名比Enumeration更科学;
  • Iterator比Enumeration更安全,因为当一个集合被遍历时它会阻止其他线程对集合的修改;
  • Iterator能够删除元素,而Enumeration不能删除元素;

二、List 部分:

1、list特点:
(1)有序(插入、删除的顺序一致)
(2)允许存储重复元素
(3)有索引(可以通过for循环遍历访问)
2、List下的ArrayList与LinkedList的区别和联系:
1.一方面(联系):
它们都有序、可重复、有索引
2.另一方面(区别):
ArrayList底层是通过可变数组实现的;LinkedList底层是通过双向链表实现的;

也因此可以分析ArrayList和LinkedList的源码:

  • ArrayList底层维护了一个Object类型的数组elementData。
  • 当创建对象的时候,如果不指定容量的话,默认初始化elementData数组的大小为0;如果指定容量的话,默认初始化elementData数组大小为capacity;
  • 当添加元素时,先判断是否需要扩容,不需要直接插入;如果需要扩容,先扩容后添加:第一次添加需要扩容—10、其他次添加需要扩容的话—1.5倍扩容;
  • LinkedList底层维护了两个节点Node类型的first和last变量(与链表无异),如果是第一次添加,LinkedList中的first和last都指向新对象;如果不是第一次添加,ArrayList中的last指向新对象。

注意:根据数组与链表的增删改查特点我们可联想到,ArrayList对于元素的随机访问速度比较快,但LinkedList则需要遍历链表来访问某个元素;但是对于增加和删除操作来说,ArrayList每增加或删除元素都需要挪动其他位置的元素,而LinkedList增加或删除只需要改变对应的前后指针即可。但也不是ArrayList的增删就一定比LinkedList慢的,深处种菱浅种稻,具体情况具体分析吧。*

3、List下的vector与ArrayList区别和联系:
1、一方面(联系):
都实现了List接口,他们都是有序的集合(存取),底层实现都是数组,有索引且允许元素重复出现。
2、另一方面(区别):

  • 同步性:vector是同步的、ArrayList是非同步的。但是用的时候即使需要一个同步的大多选择构造一个同步的ArrayList,而不是选用vector实现;
  • 扩容:vector扩容增长一倍,而ArrayList扩容增长0.5倍。

三、Set 部分

1、Set特点:
(1)无序
(2)不允许重复元素
(3)没有索引
2、HashSet 与 TreeSet 区别:

  1. 一方面(联系):它们是set的子类,都具有无序、无重复、无索引的特点;
  2. 另一方面(区别):
    (1)Hashset接口是无序、不可重复的集合;而TreeSet是有序的;
    (2)HashSet底层是Hash实现(数组+链表),线程不安全;而TreeSet底层是红黑树数据结构,默认就对元素排序了;
    (3)底层:HashSet实现了Set接口,由于是Hash表,实际上采用一个HashMap的实例,所有元素存储在HashMap的Key上,而value有一个固定的值,HashSet不存储重复元素iu是重写Hashcode()和equals()方法;TreeSet底层是用TreeMap实现的,构造方法中会采用一个TreeMap实例存放元素,添加元素时先判断有无比较器,如果有就根据比较器规则进行比较,没有比较器的话,就根据元素本身特性进行添加。

3、Comparable 与 Comparator 的区别
1、Comparable强行对实现它的每个类的对象进行整体排序;这种排序称为自然排序,Compara To()被称为他的自然比较方法,只能在类中实现Compara To()一次,不能经常修改类的代码实现自己的排序;
2、Comparator强行对某个对象进行整体排序,可以将comparator传递给sort方法(Arrays.sort;Collections.sort),从而允许在排序上精准控制;

发布了45 篇原创文章 · 获赞 11 · 访问量 4830

猜你喜欢

转载自blog.csdn.net/weixin_44187963/article/details/93791071