位置:首頁 > Java技術 > Java教學 > Java Hashtable類

Java Hashtable類

哈希表(Hashtable)是原來的java.util中的一部分,是一個字典的具體實現。

然而,Java2重新設計的哈希表,以便它也實現了​​Map接口。因此,哈希表現已集成到集合框架。它類似於HashMap,但保持線程同步。

HashMap一樣,在一個哈希表哈希表存儲鍵/值對。當使用一個哈希表,您可以指定一個對象,它被用作一個鍵,要鏈接到該鍵的值。該鍵散列並將得到的散列碼用作在該值被存儲在表中的索引。

Hashtable中定義了四個構造函數。第一個版本是默認的構造函數:

Hashtable( )

第二個版本會創建一個哈希表,該表具有由size指定的初始大小:

Hashtable(int size)

第三個版本創建一個哈希表,該表具有規模和fillRatio指定的填充比指定的初始大小。

ratio 必須在0.0和1.0之間,它決定如何充分哈希表可以是之前它被向上調整大小。

Hashtable(int size, float fillRatio)

第四個版本,創建一個與m中的元素初始化一個哈希表。

哈希表的容量被設置為在m個元素的數目的兩倍。 0.75默認加載使用。

Hashtable(Map m)

除了由Map接口中定義的方法,哈希表定義了以下方法:

SN 方法及描述
1 void clear( )
複位和清空哈希表。
2 Object clone( )
返回調用對象的一個副本。
3 boolean contains(Object value)
如果一些值等於值在哈希表中存在的值,則返回true。如果冇有找到該值,返回false。
4 boolean containsKey(Object key)
如果一些鍵等於存在於哈希表中的key,則返回true。如果冇有找到鍵,返回false。
5 boolean containsValue(Object value)
如果一些值等於哈希表中存在的值,則返回true。返回false,如果冇有找到該值。
6 Enumeration elements( )
返回包含在哈希表中的值的枚舉。
7 Object get(Object key)
返回包含與key關聯的值的對象。如果鍵不在哈希表中,則返回一個空對象。
8 boolean isEmpty( )
如果哈希表是空的返回true,如果它至少包含一個鍵返回false。
9 Enumeration keys( )
返回包含在哈希表中的鍵的枚舉。
10 Object put(Object key, Object value)
插入一個鍵和一個值到哈希表中。返回null,如果key不在哈希表中,如果鍵已經在哈希表中,返回與key相關聯的先前值。
11 void rehash( )
增加了hash表的大小和改作它的所有鍵。
12 Object remove(Object key)
刪除鍵和它的值。返回與key相關聯的值。如果鍵不在哈希表中,則返回一個空對象。
13 int size( )
返回哈希表中的條目的編號。
14 String toString( )
返回字符串相當於一個哈希表。

例子:

下麵的程序說明了幾個通過這種數據結構支持的方法:

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