Latest web development tutorials

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