首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 集合框架架構圖解:Collection/Map 體系、核心實現類與關係一覽

     編輯:Java 綜合教學

集合框架整體架構

java.util.Collection (介面)
├── List (有序、可重複)
│   ├── ArrayList (動態數組、隨機訪問快)
│   ├── LinkedList (雙向鏈表、首尾增刪快)
│   ├── Vector (同步、舊版、已被 ArrayList 取代)
│   └── Stack (Vector 子類、後進先出)
├── Set (無序、不可重複)
│   ├── HashSet (HashMap 鍵、哈希表、O(1))
│   ├── LinkedHashSet (鏈表維護插入順序)
│   └── TreeSet (紅黑樹、有序、O(log n))
└── Queue (佇列)
    ├── PriorityQueue (堆、優先級)
    ├── ArrayDeque (雙端佇列、環狀數組)
    └── BlockingQueue (介面)
        ├── ArrayBlockingQueue (有界數組)
        ├── LinkedBlockingQueue (有界/無界鏈表)
        └── ...

java.util.Map (介面)
├── HashMap (哈希表、JDK8 鏈表轉紅黑樹)
├── LinkedHashMap (雙向鏈表維護順序、LRU 基石)
├── TreeMap (紅黑樹、有序鍵)
├── Hashtable (同步、舊版)
├── WeakHashMap (弱引用鍵、緩存場景)
├── IdentityHashMap (== 比較鍵)
└── ConcurrentMap (介面)
    ├── ConcurrentHashMap (分段鎖/CAS、高併發)
    └── ConcurrentSkipListMap (跳表、有序並發)

核心實現類特性對比

類別底層結構有序性線程安全Null 鍵/值典型場景
ArrayList動態數組插入序否允許隨機訪問、順序遍歷
LinkedList雙向鏈表插入序否允許首尾增刪、佇列/棧
HashSetHashMap無序否允許一個 null去重、集合運算
LinkedHashSetHashMap+鏈表插入序否允許一個 null保持插入順序去重
TreeSet紅黑樹自然序/比較器否不允許 null有序去重、範圍查詢
HashMap數組+鏈表/紅黑樹無序否允許一個 null key高性能 KV 存取
LinkedHashMapHashMap+雙向鏈表插入/訪問序否允許一個 null keyLRU 緩存、有序遍歷
TreeMap紅黑樹自然序/比較器否不允許 null key有序 KV、範圍查詢
ConcurrentHashMap數組+鏈表/紅黑樹+CAS無序是 (分段/細粒度)不允許 null高併發 KV

選型決策樹

  1. 需鍵值映射 → Map 系;需單值集合 → Collection 系。
  2. 需有序 → Tree*/Linked*;無序 → Hash*/Array*。
  3. 高併發 → ConcurrentHashMap / CopyOnWriteArrayList / BlockingQueue。
  4. 需去重 → Set;需保留重複 → List/Bag。
  5. 頻繁首尾操作 → LinkedList/ArrayDeque;隨機訪問 → ArrayList。

常見面試考點

  • ArrayList 擴容機制 (1.5 倍)、LinkedList 雙向鏈表結構。
  • HashMap 1.8 鏈表轉紅黑樹閾值 (8/6)、擴容 2 倍、死循環條件 (多線程 resize)。
  • ConcurrentHashMap 1.7 分段鎖 vs 1.8 CAS+synchronized (Node) + 鏈表轉紅黑樹。
  • HashSet 實際包裝 HashMap (值固定 PRESENT)。
  • TreeMap/TreeSet 紅黑樹旋轉、染色規則、比較器一致性。

總結

Java 集合框架以 Collection/Map 為雙根介面,提供豐富實現滿足不同性能/併發/有序需求。掌握架構圖譜、核心類特性對比、選型決策樹,能在開發中精準選擇最適集合,面試時從容應對源碼級追問。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved