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

Java 集合框架全景圖解:從 Iterable 到 ConcurrentHashMap 的核心脈絡

     編輯:Java 綜合教學

Java 集合框架全景圖解:從 Iterable 到 ConcurrentHashMap 的核心脈絡

Java 集合框架是面試高頻考點,也是日常開發最基礎的工具箱。本文通過**手繪類圖邏輯**,梳理集合體系核心接口繼承鏈、核心實現類特性對比、迭代器模式精髓、工具類妙用,構建清晰知識骨架。

一、頂層接口繼承體系(核心脊柱)

Iterable (根接口)
    │
    ├── Collection
    │       ├── List (有序、可重複)
    │       │       ├── ArrayList (動態數組,查快增刪慢)
    │       │       ├── LinkedList (雙向鏈表,增刪快查慢,可作隊列/棧)
    │       │       └── Vector (同步、舊API、擴容 2倍)
    │       │
    │       ├── Set (無序、唯一)
    │       │       ├── HashSet (HashMap 鍵值對,無序、允許 null)
    │       │       ├── LinkedHashSet (鏈表維護插入順序)
    │       │       └── TreeSet (紅黑樹,有序、無 null、元素需 Comparable)
    │       │
    │       └── Queue (隊列)
    │               ├── PriorityQueue (堆、優先級)
    │               ├── ArrayDeque (雙端隊列、非同步、性能優於 Stack)
    │               └── BlockingQueue (併發:LinkedBlockingQueue, ArrayBlockingQueue...)
    │
    └── Map (鍵值對、Key 唯一)
            ├── HashMap (數組+鏈表/紅黑樹,非同步、允許 null key/value)
            ├── LinkedHashMap (維護插入/訪問順序)
            ├── Hashtable (同步、不允許 null、擴容 2n+1、舊API)
            ├── TreeMap (紅黑樹、Key 有序、無 null key)
            ├── ConcurrentHashMap (JDK7 分段鎖、JDK8 CAS+synchronized+紅黑樹、高併發)
            └── WeakHashMap (Key 弱引用、GC 可回收、緩存場景)

二、Iterable 與 Iterator 設計精髓

  • Iterable:單一方法 iterator(),職責是**工廠方法**,每次調用返回**全新**的 Iterator 實例,保證多次遍歷互不干擾。
  • Iterator:三方法 hasNext()、next()、remove(),攜帶**遍歷狀態**(游標位置)。
  • 為什麼不直接實現 Iterator? 因為 Iterator 有狀態,若集合直接實現 Iterator,並發遍歷、嵌套遍歷會狀態衝突。Iterable 每次產出新 Iterator 完美解耦。
// 正確遍歷並刪除模式
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String s = it.next();
    if ("delete".equals(s)) it.remove(); // 唯一安全刪除方式
}

三、ListIterator:雙向遊標的增強版

  • 僅 List 實現(AbstractList.listIterator())
  • 新增 add(E)、previous()、hasPrevious()、nextIndex()、previousIndex()、set(E)
  • 支持**雙向遍歷**、指定索引開始、原地修改
ListIterator<String> it = list.listIterator(list.size()); // 從尾部開始
while (it.hasPrevious()) {
    System.out.println(it.previous()); // 逆序輸出
}

四、四大核心實現類深度對比

類別底層結構順序重複Null線程安全典型場景
ArrayList動態數組插入序允許允許否隨機訪問多、末尾增刪
LinkedList雙向鏈表插入序允許允許否頻繁頭尾/中間增刪、隊列棧
HashSetHashMap(Key)無序不允許允許 1個否去重、快速存在性判斷
TreeSetTreeMap(Key)自然序/定制序不允許不允許否有序去重、範圍查詢
HashMap數組+鏈表/紅黑樹無序Key唯一允許 1K/多V否通用 KV 存儲、緩存
Hashtable數組+鏈表無序Key唯一全不允許是(粗鎖)舊代碼兼容、極少用
ConcurrentHashMapJDK7 Segment[]、JDK8 Node[]+CAS+syn無序Key唯一全不允許是(細粒度)高併發 KV 存儲、計數器

五、Collections 與 Arrays:靜態工具類雙雄

  • Collections:sort()、shuffle()、reverse()、synchronizedXxx() (包裝同步視圖)、unmodifiableXxx() (不可變視圖)、binarySearch()、max/min()、frequency()、disjoint()
  • Arrays:sort()、binarySearch()、copyOf()、copyOfRange()、asList() (定長 List)、stream()、parallelSort() (JDK 8+)、mismatch() (JDK 9+)

六、避坑指南與最佳實踐

  1. 初始化指定容量:new ArrayList<>(100)、new HashMap<>(128) 避免擴容抖動。
  2. 優先用接口類型聲明:List<String> list = new ArrayList<>() 利於重構。
  3. 併發環境用併發集合:ConcurrentHashMap、CopyOnWriteArrayList (讀多寫少)、ConcurrentLinkedQueue。
  4. 遍歷刪除用 Iterator.remove(),增強 for / Lambda 刪除拋 ConcurrentModificationException。
  5. HashMap Key 需正確重寫 hashCode/equals,不可變對象最佳(String、包裝類、LocalDate)。
  6. AsList 陷阱:Arrays.asList() 返回定長 List,增刪拋 UnsupportedOperationException,需 new ArrayList<>(Arrays.asList(...))。

七、總結

Java 集合框架以 **Iterable/Collection/Map** 為骨架,**ArrayList/HashMap/ConcurrentHashMap** 為主力實戰類。**理解底層結構(數組/鏈表/紅黑樹/哈希桶)、線程安全機制(無鎖/粗鎖/細粒度鎖/CAS)、順序語義(無序/插入序/自然序)**,即可在海量場景中精準選型、高效排錯、優雅重構。建議將本文類圖邏輯轉為腦圖,掛在工位牆上,需要時一瞥即得。

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