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

Java 進階學習(六):集合框架核心 — 接口與實現分離的容器藝術

     編輯:Java 相關知識

容器體系宏觀圖譜

Java 集合框架核心設計:**接口與實現分離**。頂層接口定義行為契約,具體類提供差異化性能特徵。統一繼承自 java.util.Collection (單值) 與 java.util.Map (鍵值對) 兩大根接口。

Collection 分支

  • List:有序、可重複、下標隨機訪問。ArrayList(動態數組、查快增刪慢)、LinkedList(雙向鏈表、增刪快查慢)、Vector(同步、舊API)。
  • Set:無序、唯一。HashSet(HashMap 鍵、O(1))、LinkedHashSet(保持插入序)、TreeSet(紅黑樹、有序、O(logN))。
  • Queue/Deque:雙端隊列。ArrayDeque(數組循環、非同步、首選)、LinkedList、PriorityQueue(堆、優先級)。

Map 分支

  • HashMap:數組+鏈表/紅黑樹 (JDK8),O(1),非同步,允許 null 鍵值。
  • LinkedHashMap:雙向鏈表維護插入/訪問序。
  • TreeMap:紅黑樹,鍵有序 (自然序/Comparator)。
  • Hashtable:同步、舊 API,不允許 null。
  • ConcurrentHashMap:分段鎖/CAS (JDK8),高併發首選。

核心 API 速查

泛型與類型安全


// 編譯期類型檢查,避免運行時 ClassCastException
List list = new ArrayList<>();
list.add("hello");
// list.add(123); // 編譯錯誤

// 鉆石語法 JDK 7+
Map map = new HashMap<>();

集合只存引用。基本類型會自動裝箱。對象可變性若改變會影響集合內容 (如作為 Key 的對象修改 hashCode 會導致 Map 查找失效)。

迭代器模式與 fail-fast


Iterator it = list.iterator();
while (it.hasNext()) {
    String s = it.next();
    if (s.length() < 3) it.remove(); // 唯一安全的刪除方式
}
  • Iterator 統一遍歷抽象,支持 remove()。
  • fail-fast:非併發集合檢測到結構性修改 (非通過 Iterator) 會拋 ConcurrentModificationException,非線程安全保證,僅為早發現 Bug。

數組與集合互轉


// 集合 → 數組
String[] arr = list.toArray(new String[0]);

// 數組 → List (固定長度,不可增刪)
List fixed = Arrays.asList("a", "b", "c");
// 可變 List
List mutable = new ArrayList<>(Arrays.asList(arr));

// 高效複製
System.arraycopy(src, srcPos, dest, destPos, length);

選型決策樹

  1. 鍵值對 → Map:併發 → ConcurrentHashMap;有序 → TreeMap;插入序 → LinkedHashMap;通用 → HashMap。
  2. 單值序列 → List:隨機訪問多 → ArrayList;頭尾增刪多 → LinkedList/ArrayDeque。
  3. 去重/唯一性 → Set:有序 → TreeSet;插入序 → LinkedHashSet;通用 → HashSet。
  4. 隊列/棧 → ArrayDeque (雙端隊列/棧首選)。

總結

集合框架以接口抽象數據結構 (ADT),多態實現滿足不同性能需求。理解底層數據結構 (動態數組、鏈表、哈希表、紅黑樹、堆) 的時空複雜度權衡,是高效選型與調優的關鍵。實戰中善用 Collections/Arrays 工具類、Stream API 處理管道,編寫簡潔健壯的代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作Collection/List/SetMap
添加add(e) / add(index, e)put(k, v) / putIfAbsent(k, v)
獲取get(index) (List)get(k)
刪除remove(index) / remove(o)remove(k) / remove(k, v)
查找contains(o) / indexOf(o)containsKey(k) / containsValue(v)
大小size() / isEmpty()size() / isEmpty()
遍歷iterator() / forEach / stream()keySet() / values() / entrySet()