目录
一、总述
理解Java集合体系可以从三个层次:最上层的接口、中间的抽象类、最后的实现类
1.1 最上层接口
表示不同的类型集合,Collection、Map、List、Set、Queue、Deque等,以及辅助性质的接口Iterator、LinkIterator、Comparator、Comparable这些接口是为迭代和比较元素而准备。
1.2 中层抽象类
在这里实现大多数的接口方法,继承类只需要根据自身特性重写部分方法或者实现接口方法即可。
1.3 最底层实现类
对接口的具体实现,主要常用的有:ArrayList、LinkedList、HashMap、HashSet、TreeMap等等。
除此之外,还有Collections和Arrays类用来提供各种方法,方便开发。
二、集合基础
2.1 Java集合类
主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set、List、Queue。所有的Java集合类,都是Set、List、Queue、Map这四个接口的实现类。
2.1.1 Collection
是所有集合框架的根接口,包含了对集合进行基本操作的方法
- List接口:有序集合,允许元素重复。常见实现类有ArrayList、LinkedList
- Set接口:不允许重复元素的集合。常见实现类有HashSet、LinkedHashSet、TreeSet
- Queue接口:用于表示队列的数据结构。常见实现类有LinkedList、PriorityQueue
2.1.2 Map
表示键值对的集合。常见实现类有HashMap、LinkedHashMap、TreeMap
2.2 集合底层的数据结构
2.2.1 List
- ArrayList:基于动态数组实现。底层使用数组作为存储结构
- LinkedList:基于双向链表实现。底层使用节点连接形成链表结构
- Vector:类似于ArrayList,但是是线程安全的。底层也是使用数组实现
2.2.2 Set
- HashSet:基于哈希表实现。底层使用一个数组和链表/红黑树的结构来存储元素
- LinkedHashSet:在HashSet的基础上加入了链表,使得迭代顺序可预测
- TreeSet:基于红黑树实现。底层使用自平衡的二叉搜索树存储元素,以保持有序性
2.2.3 Queue
- LinkedList:基于双向链表实现。底层同时实现了List、Queue、Deque接口
- PriorityQueue:基于优先级堆实现的队列。底层使用数组表示的二叉堆
2.2.4 Map
- HashMap:基于哈希表实现。底层使用一个数组和链表/红黑树的结构来存储键值对
- LinkedHashMap:在HashMap的基础上加入了链表,使得迭代顺序可预测
- TreeMap:基于红黑树实现。底层使用自平衡的二叉搜索树存储键值对,以保持有序性
- HashTable:类似于HashMap,但是线程安全的。底层也是使用哈希表
2.3 集合线程是否安全
2.3.1 线程安全
- Vector:通常建议使用ArrayList
- HashTable:通常建议使用HashMap
- Collections.synchronizedList、Collections.synchronizedSet、Collections.synchronizedMap:这些方法可以将非线程安全的集合包装成线程安全的集合
2.3.2 线程不安全
- ArrayList、LinkedList、HashSet、HashMap
- TreeSet、TreeMap:虽然两者是有序集合,但也是非线程安全的