Dictionary 定義鍵值映射抽象介面:put/get/remove/keys/elements/size/isEmpty。Hashtable 是標準庫唯一實作 (Java 1.0/1.1),採用雜湊表實現 O(1) 查找,大幅優於線性搜尋的簡易實作 (如雙 Vector)。
所有物件繼承 Object.hashCode(),返回「相對唯一」整數。Hashtable 利用雜湊碼快速定位鍵,避免線性掃描。自定義雜湊表可進一步優化 (避免造型與同步開銷)。
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 不可變)。
作為鍵的類別 必須同時覆寫:
hashCode():返回一致的雜湊碼 (如 ID)。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() (位址比較) 導致查找失效。
System.getProperties() 獲取系統屬性。save()/load() 持久化。