java 集合框架
注: 图中只列举了主要的继承派生关系,并没有列举所有关系。比方省略了AbstractList, NavigableSet等抽象类以及其他的一些辅助类,如想深入了解,可自行查看源码。
并发集合
实现的集合接口 | 并发集合 | 底层实现及作用 |
---|---|---|
List | Vector | 相当于线程安全的 ArrayList ,支持并发。 读写操作都用了 synchronized 同步,适用于写多读少的场景。 已被弃用:因为 Vector 在每个可能出现线程安全的方法上加了 synchronized 关键字,效率低。 |
List | CopyOnWriteArrayList | 相当于线程安全的 ArrayList ,支持高并发访问。 在写的时候复制一个副本,对副本写,写完用副本替换原值,读的时候不需要同步,读写并发,适用于写少读多的场合。 |
Set | CopyOnWriteArraySet | 相当于线程安全的 HashSet,基于 CopyOnWriteArrayList 实现,只是进行了去重。 |
Set | ConcurrentSkipListSet | 相当于线程安全的 TreeSet,基于跳表结构实现,支持高并发访问。 |
Map | ConcurrentHashMap | 相当于线程安全的 HashMap,支持高并发访问。 |
Map | ConcurrentSkipListMap | 相当于线程安全的 TreeMap,基于跳表实现,使用跳表的数据结构进行快速查找,支持高并发访问。 专用于高并发的Map实现,内部实现进行了锁分离,get操作是无锁的。 |
Queue | ArrayBlockingQueue | 基于数组实现的线程安全的有界阻塞队列。 |
Queue | LinkedBlockingQueue | 阻塞队列,非常适合用于作为数据共享的通道。 |
Queue | ConcurrentLinkedQueue | 非阻塞队列,CAS 非阻塞算法,相当于线程安全的 LinkedList。 |
Deque | LinkedBlockingDeque | 基于双向链表实现的双向并发阻塞队列,支持 FIFO、FILO。 |
Deque | CopyOnWriteArrayList | 基于双向链表实现的无界队列,支持FIFO、FILO。 |
关于跳表 百度百科 https://baike.baidu.com/item/%E8%B7%B3%E8%A1%A8/22819833
List 接口直接实现类:ArrayList,Vector,LinkedList。
Vector 和 ArrayList 的区别
集合 | 区别 |
---|---|
ArrayList | 线程不安全,只能在单线程下使用。 |
Vector | 线程安全,使用了 synchronized 关键字保证多线程访问安全。 |