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

Java 集合框架核心:List 與 Set 實作機制、效能特徵與選型指南

     編輯:Java 相關知識

集合體系速覽

Collection (介面)
 ├── List (有序、可重複) → ArrayList, LinkedList, Vector
 └── Set (無序、唯一)     → HashSet, LinkedHashSet, TreeSet

List 實作詳解

實作類別底層結構隨機存取頭尾插入/刪除中間插入/刪除適用場景
ArrayList動態陣列O(1) ✅O(1) 擴容攤銷O(n) 需搬移元素頻繁讀取、偶爾尾端新增
LinkedList雙向鏈結串列O(n) ❌O(1) ✅O(1) 定位後頻繁頭尾/中間增刪、佇列/堆疊
Vector同步化動態陣列O(1)O(1)O(n)舊版 API、需執行緒安全時 (建議用 Collections.synchronizedList 或 CopyOnWriteArrayList)

ListIterator:雙向游標,支援 add()/set()/previous(),僅 LinkedList 高效使用。

Set 實作詳解

實作類別底層結構查詢/插入/刪除順序保證元素需實作適用場景
HashSetHashMap (雜湊表)O(1) 平均無序hashCode()、equals()高效去重、查找、不需排序
LinkedHashSetHashMap + 雙向鏈結O(1) 平均插入順序hashCode()、equals()需保留插入順序的去重集合
TreeSet紅黑樹 (NavigableMap)O(log n)自然排序 / ComparatorComparable 或 提供 Comparator需排序、範圍查詢 (headSet/tailSet)

選型決策樹

  1. 需要 保留插入順序 且 唯一 → LinkedHashSet
  2. 需要 排序/範圍查詢 且 唯一 → TreeSet
  3. 單純 高效去重/查找 → HashSet
  4. 需要 索引隨機存取、以讀為主 → ArrayList
  5. 需要 頻繁頭尾/中間增刪、實作 Queue/Deque → LinkedList
  6. 多執行緒環境 → 考慮 CopyOnWriteArrayList、ConcurrentHashMap.newKeySet() 等並發集合。

常見誤區提醒

  • Set 判斷唯一性依賴 equals() + hashCode(),**必須雙方一致覆寫**,否則會出現「邏輯相等但雜湊碼不同」導致重複元素。
  • ArrayList 擴容會複製陣列,大量資料預知規模時用 new ArrayList<>(capacity) 減少擴容開銷。
  • LinkedList 實作 Deque,push/pop、offer/poll 皆為 O(1),勿自行造輪子。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved