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
相關文章
相關標籤/搜索