Java 8 集合不完全一览

JDK 8

List

名称线程安全数据结构允许 null默认初始容量扩容策略备注
ArrayList不安全数组允许101.5 * old
LinkedList不安全双链表允许N/AN/A作为 List 使用时,最好换用低复杂度的 TreeList
CopyOnWriteArrayList安全数组 + 快照允许0+1

Map

名称线程安全数据结构允许 null key允许 null value有序性默认初始容量扩容策略备注
HashMap不安全多个(单链表或者红黑树)组成的数组允许允许无序162 * old
IdentityHashMap不安全数组允许允许无序32?
LinkedHashMap不安全多个双链表组成的数组允许允许有序(access-order 或者 insertion-order)162 * old
TreeMap不安全红黑树不允许允许有序N/AN/A
EnumMap不安全数组不允许允许有序N/AN/A
ConcurrentHashMap安全多个(单链表或者红黑树)组成的数组不允许不允许无序162 * old
ConcurrentSkipListMap安全跳表不允许不允许有序N/A?

Set

名称线程安全数据结构允许 null有序性备注
HashSet不安全HashMap允许无序
LinkedHashSet不安全LinkedHashMap允许有序(insertion-order)
TreeSet不安全TreeMap不允许有序
ConcurrentSkipListSet安全ConcurrentSkipListMap不允许有序
CopyOnWriteArraySet安全CopyOnWriteArrayList允许无序

Queue

名称线程安全数据结构允许 null默认初始容量扩容策略备注
ArrayDeque不安全数组不允许162 * oldhead 从数组的最大下标开始变小,tail 从 0 开始变大
PriorityQueue不安全平衡最小二叉堆不允许11old < 64 则 2 * old; 否则 1.5 * old空穴, sift up,sift down
ConcurrentLinkedQueue安全单链表 + CAS不允许N/AN/A
ConcurrentLinkedDeque安全双链表 + CAS不允许N/AN/A
ArrayBlockingQueue安全循环数组不允许N/A定长, 不可扩容 有 fair 选项; 2. 有一把公共的 ReentrantLock 与 notFull、notEmpty 两个 Condition 管理队列满或空时的阻塞状态
LinkedBlockingQueue安全单链表不允许N/A定长或无界利用链表的特征,分离了 takeLock 与 putLock 两把锁,继续用 notEmpty、notFull 管理队列满或空时的阻塞状态
LinkedBlockingDeque安全双链表不允许N/A定长或无界利用链表的特征,分离了 takeLock 与 putLock 两把锁,继续用 notEmpty、notFull 管理队列满或空时的阻塞状态
PriorityBlockingQueue安全平衡最小二叉堆不允许11old < 64 则 2 * old; 否则 1.5 * old空穴, sift up,sift down
DelayQueue安全PriorityQueue不允许见 PriorityQueue见 PriorityQueueScheduledThreadPoolExecutor 用了类似的结构
SynchronousQueue安全N/A不允许1N/A有 fair 选项
LinkedTransferQueue安全单链表 + CAS不允许N/AN/A

转载于:https://www.cnblogs.com/leonxyzh/p/7288970.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值