Java 8 集合不完全一览
来源:互联网 发布:乐视tv for mac 编辑:程序博客网 时间:2024/05/29 14:21
JDK 8
List
名称 | 线程安全 | 数据结构 | 允许 null | 默认初始容量 | 扩容策略 | 备注 | ArrayList 不安全 数组 允许 10 1.5 * old LinkedList 不安全 双链表 允许 N/A N/A 作为 List 使用时,最好换用低复杂度的 TreeList CopyOnWriteArrayList 安全 数组 + 快照 允许 0 +1 Map
名称 | 线程安全 | 数据结构 | 允许 null key | 允许 null value | 有序性 | 默认初始容量 | 扩容策略 | 备注 | HashMap 不安全 多个(单链表或者红黑树)组成的数组 允许 允许 无序 16 2 * old IdentityHashMap 不安全 数组 允许 允许 无序 32 ? LinkedHashMap 不安全 多个双链表组成的数组 允许 允许 有序(access-order 或者 insertion-order) 16 2 * old TreeMap 不安全 红黑树 不允许 允许 有序 N/A N/A EnumMap 不安全 数组 不允许 允许 有序 N/A N/A ConcurrentHashMap 安全 多个(单链表或者红黑树)组成的数组 不允许 不允许 无序 16 2 * old ConcurrentSkipListMap 安全 跳表 不允许 不允许 有序 N/A ? Set
名称 | 线程安全 | 数据结构 | 允许 null | 有序性 | 备注 | HashSet 不安全 HashMap 允许 无序 LinkedHashSet 不安全 LinkedHashMap 允许 有序(insertion-order) TreeSet 不安全 TreeMap 不允许 有序 ConcurrentSkipListSet 安全 ConcurrentSkipListMap 不允许 有序 CopyOnWriteArraySet 安全 CopyOnWriteArrayList 允许 无序 Queue
名称 | 线程安全 | 数据结构 | 允许 null | 默认初始容量 | 扩容策略 | 备注 | ArrayDeque 不安全 数组 不允许 16 2 * old head 从数组的最大下标开始变小,tail 从 0 开始变大 PriorityQueue 不安全 平衡最小二叉堆 不允许 11 old < 64 则 2 * old; 否则 1.5 * old 空穴, sift up,sift down ConcurrentLinkedQueue 安全 单链表 + CAS 不允许 N/A N/A ConcurrentLinkedDeque 安全 双链表 + CAS 不允许 N/A N/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 安全 平衡最小二叉堆 不允许 11 old < 64 则 2 * old; 否则 1.5 * old 空穴, sift up,sift down DelayQueue 安全 PriorityQueue 不允许 见 PriorityQueue 见 PriorityQueue ScheduledThreadPoolExecutor 用了类似的结构 SynchronousQueue 安全 N/A 不允许 1 N/A 有 fair 选项 LinkedTransferQueue 安全 单链表 + CAS 不允许 N/A N/A 0 0