概念
FIFOFirst in First out,先进先出 队列LIFOLast in First out,后进先出 栈RandomAccess,是一个标识,实现了改接口的容器,快速随机访问功能有序:插入的顺序保持,当遍历集合时会按照插入顺序展示;无序:不保持插入的顺序同步:即线程安全,可以在多线程下保持数据正确;不同步:线程不安全有界:有容量限制,会阻塞或者触发异常;无界:没有容量限制- 命名中带有
Array都是数组实现,Linked都是链表实现

Collection 集合
List 序列
ArrayList
Vector
synchronized同步方法和代码块
Stack LIFO栈
- 后进先出(LIFO)栈,推荐使用Deque
LinkedList
- 双向链表实现
CopyOnWriteArrayList
- 同步
lock锁实现,性能更好- 适合读多写少场景
- 数据最终一致性,不能保证数据的实时一致性
Set 不可重复集合
TreeSet
TreeMap实现
HashSet
HasMap实现
LinkedHashSet
CopyOnWriteArraySet
- 同步
- 基于
CopyOnWriteArrayList实现
ConcurrentSkipListSet
- 同步
- 有序
ConcurrentSkipListMap实现
Queue FIFO队列
AbstractQueue
PriorityQueue
- 自己内部排序
- 无界
- 不同步
ConcurrentLinkedQueue
- 无界
- 同步
Deque 双端队列
- 可以从头部和尾部获取元素
ArrayDeque
- 无界
- 不同步
ConcurrentLinkedDeque
- 无界
- 同步
BlockingQueue 阻塞队列
- 同步
- 有界
- 当生产者向队列添加元素但队列已满时,生产者会被阻塞
- 当消费者从队列移除元素但队列为空时,消费者会被阻塞
| 异常 | 返回null | 阻塞 | 超时 | |
|---|---|---|---|---|
| 插入 | add(e) | offer(e) | put(e) | offer(e,time,unit) |
| 删除 | remove() | poll() | take() | poll(time,unit) |
| 检查 | element() | peek() | 不适用 | 不适用 |
ArrayBlockingQueue
- 可选公平,降低吞吐量
- 先阻塞的生产者线程,可以先往队列里插入元素
- 先阻塞的消费者线程,可以先从队列里获取元素
LinkedBlockingQueue
- 比
ArrayBlockingQueue吞吐量高
BlockingDeque 阻塞双端队列
LinkedBlockingDeque
PriorityBlockingQueue
- 无界
- 自己内部排序 同
PriorityQueue
TransferQueue 传输队列
- 生产者会一直阻塞直到所添加到队列的元素被某一个消费者所消费
LinkedTransferQueue
- 无界
Map 映射
TreeMap
- 可以自定义排序规则
HashMap

- 数组(桶)+链表(数量小于8)+红黑树(大于等于8) 实现
- 初始容量:默认16。如果指定必须是2的n次幂
- 负载因子:默认0.75。
- 调低负载因子,HashMap 的增删改查等操作的效率将会变高,这里是典型的拿空间换时间
- 反之,则相反
- 负载:初始容量*负载因子。超过负载会扩容
- 扩容:
- HashMap会扩容到原来的两倍
- 每个元素重新Hash
- 消耗性能
LinkedHashMap
Hashtable
- synchronized 同步所有方法,效率不高
ConcurrentHashMap
- volatile CAS 轻量级的同步
- 效率高于HashTable
ConcurrentSkipListMap
EnumMap
- key值为枚举
1053

被折叠的 条评论
为什么被折叠?



