概述
Java 最常见的四种集合为
- List
- Set
- Queue
- Map
其中,List、Set、Queue 均实现了 Collection 接口,而 Collection 又继承自 Iterable 接口,也就是说,List、Set、Queue 均是可以进行遍历的。而 Map 则是键值对形式的数据结构。
List
特点
- 有序
- 可重复
- 提供了按索引查询的方法
ArrayList
- 继承了 AbstractList 类并实现了 List、RandomAccess、Clonable、java.io.Serializable 接口
- 数组实现
- 查询快,增、删、改慢
- 线程不安全
Vactor
- 继承了 AbstractList 类并实现了 List、RandomAccess、Cloneable、java.io.Serializable 接口
- 数组实现
- 查询快,增、删、改慢
- 线程安全,每个方法都添加了 synchronized 关键字保证线程安全
LinkedList
- 继承了 AbstractSequentialList 类并实现了 List、Deque、Cloneable、java.io.Serializable 接口,而 AbstractSequentialList 类则继承自 AbstractList 类
- 双向链表实现
- 查询慢、增、删、改快
- 线程不安全
Set
特点
- 无序
- 不可重复
HashSet
- extends AbstractSet implements Set
- HashMap 实现
- 无序
- 线程不安全
LinkedHashSet
- extends HashSet implements Set
- LinkedHashMap 实现
- 无序
- 线程不安全
TreeSet
- extends AbstractSet implements NavigableSet
- TreeMap 实现
- 通过 Comparator 实现排序
- 线程不安全
Queue
特点
- 有序,先进先出
- 从查询与写入的角度来看,分为阻塞和非阻塞队列
- 从操作方式来看,分为单向操作跟双向操作(Queue&Deque)
- 从优先级的角度来看,还分为优先级与非优先级队列
ConcurrentLinkedQueue
- 非阻塞队列
- 线程安全
- 链表实现
- 先进先出,无优先级
- 单向操作
PriorityQueue
- 非阻塞队列
- 线程不安全
- 数组实现
- 通过 Comparator 实现排序优先级
- 单向操作
LinkedBlockingQueue
- 阻塞队列
- 线程安全
- 链表实现
- 先进先出,无优先级
- 单向操作
ArrayBlockingQueue
- 阻塞队列
- 线程安全
- 数组实现
- 先进先出,无优先级
- 单向操作
PriorityBlockingQueue
- 阻塞队列
- 线程安全
- 数组实现
- 通过 Comparator 实现排序优先级
- 单向操作
DelayQueue
- 阻塞队列
- 线程安全
- 封装 PriorityQueue 实现
- 先进先出,无优先级
- 单向操作
LinkedTransferQueue
//TODO
ArrayDeque
- 非阻塞队列
- 线程不安全
- 数组实现
- 双向操作,从头部或尾部开始操作
ConcurrentLinkedDeque
- 非阻塞队列
- 线程安全
- 双向链表实现
- 双向操作,从头部或尾部开始操作
LinkedBlockingDeque
- 阻塞队列
- 线程安全
- 双向链表实现
- 双向操作,从头部或尾部开始操作
Map
特点
- 键值对数据结构
HashMap
- 数组链表实现
- 线程不安全
- key 允许为空