Java集合框架了解下
引用一张别人整理的图
一、概述
Collection接口作为所有集合操作的顶层抽象,它提供了集合操作的一些最基本的属性,List和Set是它的两大直接实现,最为本质的区别是:
- List是有序,可重复的
- Set无序不可重复的
这里只说是直接区别,List和Set的其他实现可以让他拥有更多的特性。
二、List
从类的关系图中可以看出对List的直接实现涵盖如下:
1.List的实现
- LinkedList:动态数组
- ArrayList:双向链表
- Vector:与ArrayList相似,但线程安全
- Stack:先进后出的栈
2.不同实现的特性描述
不同实现特点的话跟数据结构的特性是一致的,很好理解。
- 链表:插入快,查找慢。
- 数组:插入慢,查找快。
3.特性原因描述
- 链表在执行插入的时候,不需要像数组一样去移动数据,只需要维护指针地址就行。
- 链表在执行查找的时候,需要遍历整个链表来找到数据,时间复杂度O(n),而数组是支持随机访问的时间复杂度为O(1)。
三、Set
1.Set的实现
Set是不包含相同元素的集合,元素是否相同是根据重写的equal方法来判断的,这个是需要注意的。
- Set
- HashSet
- LinkedHashSet
- TreeSet
不同实现的特性参考List,主要是根据集合是根据那个数据结构来实现的
四、Map
Map不是直接继承、实现Collection,而是由一系列键值对组成的集合。
1.Map的实现
- Map
- HashMap
底层是由一个hash数组实现,数组的下标为key的hash值,如果有hash碰撞则用单链表来维护。 - LinkedHashMap
可以理解为是一个有顺序的HashMap - TreeMap
- HashMap