Java Hashtable 類
Hashtable是原始的java.util的一部分, 是一個Dictionary具體的實現 。
然而,Java 2 重構的Hashtable實現了Map介面,因此,Hashtable現在集成到了集合框架中。它和HashMap類很相似,但是它支持同步。
像HashMap一樣,Hashtable在哈希表中存儲鍵/值對。當使用一個哈希表,要指定用作鍵的對象,以及要鏈接到該鍵的值。
然後,該鍵經過哈希處理,所得到的散列碼被用作存儲在該表中值的索引。
Hashtable定義了四個構造方法。第一個是默認構造方法:
Hashtable()
第二個構造函數創建指定大小的哈希表:
Hashtable(int size)
第三個構造方法創建了一個指定大小的哈希表,並且通過fillRatio指定填充比例。
填充比例必須介於0.0和1.0之間,它決定了哈希表在重新調整大小之前的充滿程度:
Hashtable(int size,float fillRatio)
第四個構造方法創建了一個以M中元素為初始化元素的哈希表。
哈希表的容量被設置為M的兩倍。
Hashtable(Map m)
Hashtable中除了從Map介面中定義的方法外,還定義了以下方法:
序號 | 方法描述 |
---|---|
1 |
void clear( ) 將此哈希表清空,使其不包含任何鍵。 |
2 |
Object clone( ) 創建此哈希表的淺表副本。 |
3 |
boolean contains(Object value) 測試此映射表中是否存在與指定值關聯的鍵。 |
4 |
boolean containsKey(Object key) 測試指定對象是否為此哈希表中的鍵。 |
5 |
boolean containsValue(Object value) 如果此 Hashtable 將一個或多個鍵映射到此值,則返回 true。 |
6 |
Enumeration elements( ) 返回此哈希表中的值的枚舉。 |
7 |
Object get(Object key) 返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回 null. 更確切地講,如果此映射包含滿足 (key.equals(k)) 的從鍵 k 到值 v 的映射,則此方法返回 v;否則,返回 null。 |
8 |
boolean isEmpty( ) 測試此哈希表是否沒有鍵映射到值。 |
9 |
Enumeration keys( ) 返回此哈希表中的鍵的枚舉。 |
10 |
Object put(Object key, Object value) 將指定 key 映射到此哈希表中的指定 value。 |
11 |
void rehash( ) 增加此哈希表的容量並在內部對其進行重組,以便更有效地容納和訪問其元素。 |
12 |
Object remove(Object key) 從哈希表中移除該鍵及其相應的值。 |
13 |
int size( ) 返回此哈希表中的鍵的數量。 |
14 |
String toString( ) 返回此 Hashtable 對象的字串表示形式,其形式為 ASCII 字元 ", " (逗號加空格)分隔開的、括在括弧中的一組條目。 |
實例
下麵的程式說明這個數據結構支持的幾個方法:
import java.util.*; public class HashTableDemo { public static void main(String args[]) { // Create a hash map Hashtable balance = new Hashtable(); Enumeration names; String str; double bal; balance.put("Zara", new Double(3434.34)); balance.put("Mahnaz", new Double(123.22)); balance.put("Ayan", new Double(1378.00)); balance.put("Daisy", new Double(99.22)); balance.put("Qadir", new Double(-19.08)); // Show all balances in hash table. names = balance.keys(); while(names.hasMoreElements()) { str = (String) names.nextElement(); System.out.println(str + ": " + balance.get(str)); } System.out.println(); // Deposit 1,000 into Zara's account bal = ((Double)balance.get("Zara")).doubleValue(); balance.put("Zara", new Double(bal+1000)); System.out.println("Zara's new balance: " + balance.get("Zara")); } }
以上實例編譯運行結果如下:
Qadir: -19.08 Zara: 3434.34 Mahnaz: 123.22 Daisy: 99.22 Ayan: 1378.0 Zara's new balance: 4434.34