• Java 8 集合不完全一览


    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
  • 相关阅读:
    netty系列之:基于流的数据传输
    netty系列之:中国加油
    netty系列之:Event、Handler和Pipeline
    netty系列之:netty中的Channel详解
    netty系列之:netty架构概述
    Python 列表解析式竟然支持异步?
    Python 数值中的下划线是怎么回事?
    Nginx+keepalived 双机主从模式下修改主Nginx自动同步nginx.conf配置文件至备Nginx
    Oracle nvarchar2存储特殊字符乱码问题
    Oracle 11.2.0.4.0版本下大表添加默认值字段影响因素
  • 原文地址:https://www.cnblogs.com/leonxyzh/p/7288970.html
Copyright © 2020-2023  润新知