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

Java 集合框架核心實現類深度解析:Collection、Map 體系與最佳選型指南

     編輯:Java 相關知識

Java 集合框架整體架構

JDK java.util 套件提供完整資料結構實現,核心介面繼承關係:

Collection
├── List          // 有序、可重複
│   ├── ArrayList  // 動態陣列,隨機存取快
│   ├── LinkedList // 雙向鏈表,首尾增刪快
│   ├── Vector     // 同步版 ArrayList
│   └── Stack      // 繼承 Vector,LIFO 棧
└── Set           // 無序、不可重複
    ├── HashSet    // HashMap 底層
    ├── LinkedHashSet // 保持插入順序
    └── TreeSet    // 紅黑樹,有序

Map               // Key-Value 映射
├── HashMap       // 非同步、允許 null
├── Hashtable     // 同步、不允許 null
├── LinkedHashMap // 保持插入/存取順序
├── TreeMap       // 紅黑樹,Key 有序
└── WeakHashMap   // Weak Reference Key,適合快取

核心介面與實現類深度解析

Collection 介面:統一遍歷契約

所有實現類必須提供:

  • 無參建構子(建立空集合)
  • 單參 Collection 建構子(複製集合)
  • iterator() 方法回傳 Iterator 統一遍歷
Iterator<E> it = collection.iterator();
while (it.hasNext()) {
    E element = it.next();
    // 處理元素
}

List 介面:有序集合的隨機存取

實現類底層結構隨機存取首尾操作執行緒安全適用場景
ArrayList動態陣列O(1) 快O(n) 慢否頻繁隨機存取、少量增刪
LinkedList雙向鏈表O(n) 慢O(1) 快否頻繁首尾增刪、佇列/棧
Vector動態陣列O(1)O(n)是舊代碼相容,新代碼建議用 Collections.synchronizedList()
Stack繼承 Vector--是LIFO 棧操作

ArrayList 擴容機制:預設容量 10,擴容 1.5 倍。大量新增前呼叫 ensureCapacity() 可減少擴容開銷。

Set 介面:去重集合

  • 依賴 equals() 判斷重複,最多一個 null
  • 元素不可變性至關重要:若放入後修改導致 equals() 變化,會破壞 Set 不變量

Map 介面:鍵值映射

實現類同步允許 Null順序適用場景
HashMap否Key/Value 皆可無序高效能通用映射
Hashtable是不可無序舊 API,新代碼用 ConcurrentHashMap
LinkedHashMap否可插入/存取序LRU 快取、需順序遍歷
TreeMap否Key 不可Key 自然序/Comparator範圍查詢、有序映射
WeakHashMap否可無序Key 弱引用,適合元資料快取

HashMap Key 設計鐵律:必須正確重寫 hashCode() 與 equals(),且 Key 物件放入後不可變更相關欄位。建議用 String、Integer 等不可變包裝類作 Key。

Collections 工具類:高階操作一站式

java.util.Collections 提供靜態方法操作集合:

  • 排序:sort(list)、sort(list, comparator)
  • 洗牌:shuffle(list) 隨機打亂
  • 反轉:reverse(list)
  • 填充:fill(list, obj) 全部替換為指定元素
  • 複製:copy(dest, src) 覆蓋目標列表前段
  • 極值:min/max(collection)、min/max(collection, comparator)
  • 子列表搜尋:indexOfSubList、lastIndexOfSubList
  • 旋轉:rotate(list, distance) 循環位移

選型決策指南

  1. 需棧/佇列操作 → LinkedList 或 ArrayDeque (JDK 6+ 推薦)
  2. 需快速增刪、少量隨機存取 → LinkedList
  3. 需快速隨機存取、尾部新增為主 → ArrayList
  4. 需去重 → HashSet / LinkedHashSet
  5. 需 Key-Value 映射 → HashMap (單執行緒) / ConcurrentHashMap (多執行緒)
  6. 需 Key 有序或範圍查詢 → TreeMap
  7. 需快取自動清理 → WeakHashMap / LinkedHashMap + removeEldestEntry
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved