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

Java 集合框架核心:Hashtable、HashMap、WeakHashMap、HashSet、TreeSet 詳解

     編輯:Java 相關知識

本文系統整理 Java 集合框架中 Map 與 Set 體系的核心實現類,涵蓋特性對比、原理機制、效能調優參數與最佳實踐。

Hashtable

  • 繼承 Dictionary、實作 Map,同步安全(方法加 synchronized)
  • Key/Value 不允許 null
  • 預設初始容量 11,擴容公式:old * 2 + 1
  • 負載因子預設 0.75,平衡時間與空間
  • Key 必須正確實作 hashCode() 與 equals()

HashMap (JDK 1.8+)

  • 繼承 AbstractMap,非同步,允許 一個 null Key、多個 null Value
  • 預設初始容量 16(2 的冪次),擴容 2 倍
  • 鏈表 + 紅黑樹(鏈表長度 > 8 且容量 > 64 時樹化)
  • 迭代器為 fail-fast,併發環境建議用 ConcurrentHashMap
  • get() 回傳 null 不代表 key 不存在,需用 containsKey() 判斷

WeakHashMap

  • Key 為弱引用,Key 無強引用時 GC 可回收,對應 entry 自動移除
  • 適用於生命週期跟隨 Key 的快取、元數據儲存
  • 同樣非同步,併發需外部同步

HashSet

  • 基於 HashMap 實作(Value 固定為 PRESENT 物件)
  • 不保證順序,非同步,允許一個 null 元素
  • 預設初始容量 16,負載因子 0.75
  • 迭代時間與容量成正比,大量資料建議預設合適初始容量

TreeSet

  • 基於 TreeMap(紅黑樹)實作,有序(自然順序或 Comparator)
  • 操作時間複雜度 O(log n),比 HashSet 慢但支援範圍查詢
  • 元素必須實作 Comparable 或提供 Comparator
  • 無調優參數,適合需排序、範圍操作的場景

選擇指南

需求推薦實現
高效增刪查、無序、單線程HashMap / HashSet
高效增刪查、無序、多線程ConcurrentHashMap
Key 生命週期自動管理WeakHashMap
有序遍歷、範圍查詢TreeMap / TreeSet
舊代碼兼容、同步 MapHashtable (不推薦新代碼)

效能調優提醒

  • 預估資料量,設定合適 initialCapacity 避免頻繁擴容
  • 負載因子過高(>0.75)增加碰撞,過低浪費記憶體
  • Key 類務必重寫 hashCode() 與 equals(),且保持一致性
  • 避免在迭代過程中修改集合(會拋 ConcurrentModificationException)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved