常用容器以及并发容器

常用容器结构图

161352345105405

一张表了解常用容器

容器类说明实现原理
List
序列
ArrayList随机访问快速,插入和移除数据较慢数组
LinkedList随机访问较慢,插入和移除数据较快双向链表
Set
元素唯一
HashSet查找快速,元素必须定义hashCode()HashMap
TreeSet保持次序的Set,元素必须实现ComparableTreeMap
LinkedHashSet维持元素插入的顺序,具有HashSet的查询速度,
插入性能稍微逊色,迭代性能高
HashSet和链表
EnumSet存储同一枚举类型的Set数组
Map
键值对
HashMap插入和查询开销固定,调整性能因子提高性能散列表
TreeMap按键的次序排序红黑树
LinkedHashMap保持插入的次序或LRU,迭代性能高于HashMap,
插入性能略逊色
HashMap和链表
WeakHashMap键是弱引用类型,如果映射之外没有引用这个键,
该键可以被GC回收
散列表
IdentityHashMap当需要“==”而不是equals比较键时使用散列表
EnumMap同一枚举类型作为Key数组
Queue
队列
LinkedList是Queue的一种实现,提供了支持队列的方法双向链表
PriorityQueue具备优先级的队列,高优先级的元素先获得数组

表中涉及到的容器都是非线程安全的,下面介绍线程安全的容器。

一张表了解线程安全容器

容器类说明实现原理
ListCopyOnWriteArrayList相当于线程安全的ArrayList。
每次修改容器,都会复制底层数组,这需要一定的开销,
所以仅当迭代操作对于修改操作时使用
动态数组
Vector和ArrayList类似,性能比ArrayList差。数组
Stack具有栈的行为,但是糟糕的设计,基本不使用。Vector
SetCopyOnWriteArraySet相当于线程安全的HashSet。
每次修改容器,都会复制底层数组,这需要一定的开销,
所以仅当迭代操作对于修改操作时使用
CopyOnWriteArrayList
ConcurrentSkipListSet相当于线程安全的TreeSet。ConcurrentSkipListMap
MapConcurrentHashMap相当于线程安全的HashMap。分段锁机制
ConcurrentSkipListMap相当于线程安全的TreeMap。跳表(SkipList)
QueueArrayBlockingQueue有界阻塞FIFO队列。数组
LinkedBlockingQueue无界阻塞FIFO队列。链表
LinkedBlockingDeque双向阻塞队列,支持FIFO和FILO。双向队列
ConcurrentLinkedQueue无界非阻塞FIFO队列。链表
ConcurrentLinkedDeque双向并发非阻塞队列,支持FIFO和FILO。链表
DelayQueue无界阻塞FIFO队列,其中元素只有到期时
才能从队列中取走。
PriorityQueue
LinkedTransferQueue无界阻塞FIFO队列。链表
SynchronousQueue不存储元素的同步队列。CAS
PriorityBlockingQueue支持优先级的无界阻塞队列。