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

Java 集合大家族全景圖:List/Set/Map/Queue 體系、核心實現差異與選型指南

     編輯:Java 綜合教學

一、集合框架總體架構

集合框架體系圖

頂層接口:Collection(單列集合)、Map(雙列鍵值對)。

二、核心體系詳解

1. Collection → List(有序、可重複)

實現類底層結構特點線程安全
ArrayList動態數組隨機訪問快,擴容拷貝,末尾增刪 O(1)否
LinkedList雙向鏈表首尾增刪 O(1),隨機訪問 O(n),實現 Deque否
Vector動態數組方法 synchronized,擴容 2倍,性能差是
Stack繼承 Vector後進先出,提供 push/pop/peek是

2. Collection → Set(無序、唯一)

實現類底層結構特點線程安全
HashSetHashMap (哈希表)查詢最快 O(1),順序不固定否
LinkedHashSet鏈表 + 哈希表保持插入順序否
TreeSet紅黑樹自然序/定制序有序,O(log n)否
EnumSet位向量枚舉專用,極致性能否

3. Map(鍵值對、鍵唯一)

實現類底層結構特點線程安全
HashMap數組 + 鏈表/紅黑樹 (JDK8)查詢最快,允許 null key/value否
LinkedHashMap雙向鏈表 + 哈希表保持插入/訪問順序否
TreeMap紅黑樹鍵有序,實現 SortedMap否
Hashtable哈希表不允許 null,方法 synchronized是
Properties繼承 Hashtable配置文件專用,key/value 均為 String是
WeakHashMap弱引用鍵鍵無外部引用可被 GC 回收否
EnumMap數組枚舉鍵專用,性能極高否

4. Queue(隊列)

  • 阻塞隊列:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、DelayQueue、SynchronousQueue — 生產者消費者首選。
  • 非阻塞雙端隊列:ArrayDeque(推薦替代 Stack)、LinkedBlockingDeque。
  • PriorityQueue:優先級隊列(堆),非線程安全。

三、核心差異對比(高頻面試點)

ArrayList vs Vector

  • 同步性:Vector 同步(慢),ArrayList 非同步(快)。
  • 擴容:Vector 2倍,ArrayList 1.5倍。
  • 現代替代:Collections.synchronizedList(new ArrayList()) 或 CopyOnWriteArrayList。

ArrayList vs LinkedList

  • 隨機訪問:ArrayList O(1) 完勝。
  • 中間增刪:LinkedList 只改指針 O(1)(定位仍 O(n)),ArrayList 需移動數組 O(n)。
  • 記憶體:LinkedList 節點對象開銷大。
  • 經驗法則:默認 ArrayList,頻繁中間增刪才考慮 LinkedList。

HashMap vs TreeMap

  • 順序:HashMap 無序,TreeMap 紅黑樹有序。
  • 性能:HashMap O(1) 快於 TreeMap O(log n)。
  • 鍵要求:HashMap 需正確重寫 hashCode/equals;TreeMap 鍵需實現 Comparable 或傳 Comparator。

HashMap vs Hashtable

  • 歷史:Hashtable 古老 (JDK 1.0),HashMap 現代 (JDK 1.2)。
  • 同步:Hashtable 同步,HashMap 非同步。
  • null:HashMap 允許一個 null key、多個 null value;Hashtable 全不允許。

四、選型決策樹

  1. 需鍵值對 → Map:默認 HashMap,需有序 → TreeMap/LinkedHashMap,高併發 → ConcurrentHashMap。
  2. 單列集合 → Collection:
    • 需唯一 → Set:默認 HashSet,需有序 → TreeSet/LinkedHashSet。
    • 允許重複 → List:默認 ArrayList,頻繁首尾操作/作棧/隊列 → ArrayDeque/LinkedList。
  3. 生產者消費者 → BlockingQueue 實現類。

五、最佳實踐原則

  • 面向接口編程:List<String> list = new ArrayList<>();
  • 指定初始容量:new ArrayList(1000) 減少擴容。
  • 線程安全用並發包:ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueue,拒絕 Vector/Hashtable/Collections.synchronizedXxx。
  • 遍歷優先 for-each / stream(),需刪除用 Iterator.remove()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved