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

Java 集合框架核心知識圖譜:List、Set、Map 全維度解析

     編輯:Java 相關知識

核心容器性能對比速查表

容器底層結構讀取性能寫入性能特點
ArrayList動態數組快 O(1)慢 O(n)隨機訪問優,擴容觸發數組複製
LinkedList雙向鏈表慢 O(n)快 O(1)首尾增刪優,支援 Deque 操作
HashSet/HashMap哈希表(數組+鏈表/紅黑樹)快 O(1)快 O(1)無序、唯一鍵,JDK 1.8 引入紅黑樹優化
TreeSet/TreeMap紅黑樹中 O(log n)中 O(log n)有序、支援範圍查詢
LinkedHashSet/Map哈希表+雙向鏈表快 O(1)快 O(1)保持插入/訪問順序

核心概念釐清

1. 「重複」的定義

集合判斷重複依賴 equals() 方法。若作為 Map 鍵或存入 Set,必須同時重寫 hashCode(),確保:

a.equals(b) == true ⇒ a.hashCode() == b.hashCode()

否則會導致「邏輯相等但哈希不同」,造成元素無法正確查找或去重失效。

2. 三大核心接口區別

  • List:有序、可重複、支援索引訪問(ArrayList、LinkedList)
  • Set:無序、不可重複、強調唯一性(HashSet、TreeSet)
  • Map:鍵值對、鍵唯一、值可重複(HashMap、TreeMap)

實戰代碼精選

Collection 基礎操作

Collection<Object> c = new ArrayList<>();
c.add("hello");
c.add(12);           // 自動裝箱 Integer
c.add("lsb");
System.out.println(c.size());  // 3
System.out.println(c);         // [hello, 12, lsb]  — 內部調用 toString()

Iterator 通用遍歷模式

Collection<String> c = new HashSet<>();
c.add("hello"); c.add("abc"); c.add("lsb");
Iterator<String> it = c.iterator();
while (it.hasNext()) {
    System.out.println(it.next());  // 輸出順序不固定(HashSet 無序)
}

Set 數學運算:交集、並集

Set<String> c1 = new HashSet<>(Arrays.asList("a","b","c"));
Set<String> c2 = new HashSet<>(Arrays.asList("a","b","d"));

// 交集
Set<String> intersection = new HashSet<>(c1);
intersection.retainAll(c2);  // [a, b]

// 並集
Set<String> union = new HashSet<>(c1);
union.addAll(c2);            // [d, a, c, b]

Comparable 與排序

對象需實現 Comparable<T> 接口並覆寫 compareTo(T o),才能用於 TreeSet、Collections.sort() 等有序容器/操作。

Map 進階應用場景

  • 頻繁按鍵查找:HashMap(JDK 1.8+ 鏈表轉紅黑樹防退化)
  • 需按鍵排序/範圍查詢:TreeMap
  • 保持插入順序:LinkedHashMap(適合 LRU 緩存實現)
  • 多線程環境:ConcurrentHashMap(分段鎖/CAS,高併發優於 Hashtable)

避坑指南

  1. 不可在 foreach 循環中直接 remove() 集合元素 → 使用 Iterator.remove() 或收集待刪除項後批量處理
  2. 自定義對象作鍵/進 Set 必須重寫 equals/hashCode,且保持一致性
  3. 預估數據量大時,指定初始容量(new ArrayList<>(1000))減少擴容開銷
  4. 優先使用接口類型聲明(List<String> list = new ArrayList<>())便於後續替換實現
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved