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

Hashtable 完整指南:從原理到自定義鍵的正確實作

     編輯:Java 相關知識

Dictionary 抽象與 Hashtable 實作

Dictionary 定義鍵值映射抽象介面:put/get/remove/keys/elements/size/isEmpty。Hashtable 是標準庫唯一實作 (Java 1.0/1.1),採用雜湊表實現 O(1) 查找,大幅優於線性搜尋的簡易實作 (如雙 Vector)。

雜湊碼機制

所有物件繼承 Object.hashCode(),返回「相對唯一」整數。Hashtable 利用雜湊碼快速定位鍵,避免線性掃描。自定義雜湊表可進一步優化 (避免造型與同步開銷)。

實戰:統計 Math.random() 分佈

Hashtable ht = new Hashtable();
for (int i=0; i<10000; i++) {
    Integer r = new Integer((int)(Math.random()*20));
    if (ht.containsKey(r)) ((Counter)ht.get(r)).i++;
    else ht.put(r, new Counter());
}
System.out.println(ht); // 輸出鍵值對統計

需用 Integer 包裝基本型別,Counter 類封裝可變計數 (Integer 不可變)。

自定義鍵類別的關鍵契約

作為鍵的類別 必須同時覆寫:

  1. hashCode():返回一致的雜湊碼 (如 ID)。
  2. equals(Object):嚴格判斷邏輯相等 (檢查型別與 ID)。
class Groundhog2 {
    int ghNumber;
    public int hashCode() { return ghNumber; }
    public boolean equals(Object o) {
        return o instanceof Groundhog2 && ghNumber == ((Groundhog2)o).ghNumber;
    }
}

否則 Groundhog(3) 兩個實例雖邏輯相同,但預設 hashCode() (記憶體位址) 與 equals() (位址比較) 導致查找失效。

Properties:特殊 Hashtable 子類

  • System.getProperties() 獲取系統屬性。
  • 支援預設屬性列表 (雙層查找)。
  • save()/load() 持久化。
  • 常用於配置管理 (如 ClassScanner.java)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved