关于Collection与Collections:
- Collection:集合层次结构中的根接口。
- Collections: 完全由操作或返回集合的静态方法组成,包含操作集合的多态算法。Collections工具类提供了Set、List、Map进行排序、填充、查找元素的辅助方法。
先上两张常用集合图:
关于List、Set、Map接口:
- List:
- 继承Collection接口;有序集合,允许重复元素。
- 这个接口的用户可以精确地控制列表中每个元素插入的位置。
- 用户可以通过其整数索引(在列表中的位置)访问元素,并在列表中搜索元素。
- 提供了一个特殊的迭代器,称为ListIterator,它允许插入和替换元素,除了迭代器接口提供的正常操作外,还提供双向访问。
- Set: 继承Collection接口;无序集合,不允许重复元素,且最多有一个null值。
- Map: key_value键值对;不允许重复元素。
关于ArrayList、LinkedList、Vector:
-
ArrayList:
- 实现List接口;允许null值,这个类大致相当于Vector,只是它是不同步的。
- 在内存中分配连续的空间,在遍历元素和随机访问元素时效率高。
-
LinkedList:
- List和Decode接口的双链表实现;允许null值,与ArrayList类似,不同步。
- 链表存储方式,在插入,删除元素时效率高,提供额外的addFist(),addlast(),removeFirst(),removeLast(),索引到列表中的操作将从开头或结尾遍历列表,以较接近指定索引为准。
-
Vector:
-
实现可扩展的对象数组,同步。像数组一样,它包含可以使用整数索引访问的组件。但是,Vector矢量的大小可根据需要增大或缩小,以便在创建“矢量”后添加和移除项目。
-
Vector中最后一个元素后面的任何数组元素都为null。
-
存储矢量分量的数组缓冲区, 矢量的容量是这个数组缓冲区的长度,并且至少足够大以包含所有矢量的元素。
-
关于HashMap、HashSet:
HashMap: 继承Map接口,实现了哈希表,允许null,非同步。哈希表结构其实就是数组+链表;在JDK1.8中规定:当链表长度大于8时,链表长度就转换为红黑树,大大提高了查找效率。
HashSet: 继承Set接口,实现了由哈希表支持的Set接口,只能放入一个null元素,不同步。实际上是一个HashMap实例。
关于数组与链表:
- 数组:占用空间连续。寻址容易,查询速度快,但是,增加和删除效率低。
- 链表:占用空间不连续。寻址困难,查询速度慢,但是,增加和删除效率高。
- 数组+链表:综合,查询速度快,增删速度也快。
下图分别为数组,LinkedList,HashMap:
图片都是自己画的,大家将就看吧,哈哈哈~
主要是个人总结,有什么不对的地方请纠正~
来源于网络尚云堂以及源码解读~