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