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

Java 集合框架精要 (二):Map 族群特性與選型指南

     編輯:Java 相關知識

Map 介面四大常用實現 — HashMap、Hashtable、TreeMap、LinkedHashMap — 在底層結構、線程安全、迭代順序、效能特徵上差異顯著。本文系統對比五大維度,助您精準選型。

一、底層儲存機制

實現類核心資料結構特徵
HashMap陣列 + 鏈表/紅黑樹 (JDK8+)雜湊分桶,O(1) 存取,無序
Hashtable陣列 + 鏈表同步版 HashMap,歷史遺留
TreeMap紅黑樹 (自平衡二元搜尋樹)鍵值有序 (自然序/Comparator),O(log N)
LinkedHashMap繼承 HashMap + 雙向鏈表維護插入順序或存取順序

二、繼承體系

  • HashMap、TreeMap、LinkedHashMap → 繼承 AbstractMap
  • Hashtable → 繼承 Dictionary (舊版抽象類)
  • LinkedHashMap → 繼承 HashMap

三、線程安全性

  • Hashtable:所有方法 synchronized,線程安全但效能低,不推薦新代碼使用
  • 其他三者:非線程安全
  • 同步包裝:Collections.synchronizedMap(new HashMap()) 或併發包 ConcurrentHashMap (JDK5+ 首選)

四、迭代器行為

  • 所有實現的 Iterator 均為 **fail-fast** (快速失敗)
  • 迭代過程中結構性修改 (增/刪) 會拋出 ConcurrentModificationException
  • 僅修改值 (map.put(key, newVal)) 不屬結構性修改

五、不可修改視圖


Map<K,V> unmodifiable = Collections.unmodifiableMap(originalMap);
// 任何修改操作拋出 UnsupportedOperationException

六、選型決策樹

  1. 需要 **鍵值有序** (自然序/自定義比較) → TreeMap
  2. 需要 **保持插入順序** (如 LRU 快取、配置載入) → LinkedHashMap (accessOrder=true 可做 LRU)
  3. 高併發讀寫 → ConcurrentHashMap (分段鎖/CAS,無鎖讀)
  4. 單線程/外部同步,追求極致存取速度 → HashMap
  5. 遺留代碼兼容、需同步但不引入 JDK5+ → Hashtable (極少見)

七、效能微調提示

  • 初始容量:new HashMap(int initialCapacity) 避免擴容重雜湊,預估大小 * 1.3
  • 負載因子:預設 0.75,記憶體敏感可調高 (0.8-0.9),效能敏感調低 (0.5-0.6)
  • 鍵型別:優先用 String、Integer 等不可變且 hashCode() 分布良好的型別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved