Java 資料結構 - 雜湊表類
雜湊表是一種以關聯方式儲存資料的資料結構。在雜湊表中,資料以陣列格式儲存,每個資料值都有其自身的唯一索引值。如果知道所需資料的索引,則訪問資料變得非常快。
因此,它成為一種資料結構,其中插入和搜尋操作非常快,而不管資料的大小如何。雜湊表使用陣列作為儲存介質,並使用雜湊技術生成要插入元素或從中定位元素的索引。
Java 的雜湊表類
Hashtable 是最初的 java.util 的一部分,是 Dictionary 的具體實現。
但是,Java 2 重新設計了 Hashtable,使其也實現了 Map 介面。因此,Hashtable 現在已整合到集合框架中。它類似於 HashMap,但它是同步的。
與 HashMap 一樣,Hashtable 在雜湊表中儲存鍵/值對。使用 Hashtable 時,您指定用作鍵的物件以及您希望與該鍵連結的值。然後對鍵進行雜湊處理,生成的雜湊碼用作在表中儲存值的索引。
以下是 Hashtable 類提供的建構函式列表。
| 序號 | 建構函式和描述 |
|---|---|
| 1 | Hashtable( ) 這是雜湊表的預設建構函式,它例項化 Hashtable 類。 |
| 2 | Hashtable(int size) 此建構函式接受一個整數引數,並建立一個雜湊表,其初始大小由整數 value size 指定。 |
| 3 | Hashtable(int size, float fillRatio) 這將建立一個雜湊表,其初始大小由 size 指定,填充率由 fillRatio 指定。此比率必須介於 0.0 和 1.0 之間,它決定雜湊表在向上調整大小之前可以有多滿。 |
| 4 | Hashtable(Map < ? extends K, ? extends V > t) 這將使用給定的對映構造一個 Hashtable。 |
除了 Map 介面定義的方法外,Hashtable 還定義了以下方法
| 序號 | 方法和描述 |
|---|---|
| 1 | void clear( ) 重置並清空雜湊表。 |
| 2 | Object clone( ) 返回呼叫物件的副本。 |
| 3 | boolean contains(Object value) 如果雜湊表中存在某個等於 value 的值,則返回 true。如果未找到該值,則返回 false。 |
| 4 | boolean containsKey(Object key) 如果雜湊表中存在某個等於 key 的鍵,則返回 true。如果未找到該鍵,則返回 false。 |
| 5 | boolean containsValue(Object value) 如果雜湊表中存在某個等於 value 的值,則返回 true。如果未找到該值,則返回 false。 |
| 6 | Enumeration elements( ) 返回雜湊表中包含的值的列舉。 |
| 7 | Object get(Object key) 返回包含與 key 關聯的值的物件。如果鍵不在雜湊表中,則返回 null 物件。 |
| 8 | boolean isEmpty( ) 如果雜湊表為空,則返回 true;如果它包含至少一個鍵,則返回 false。 |
| 9 | Enumeration keys( ) 返回雜湊表中包含的鍵的列舉。 |
| 10 | Object put(Object key, Object value) 將鍵和值插入雜湊表。如果鍵不在雜湊表中,則返回 null;如果鍵已在雜湊表中,則返回與鍵關聯的先前值。 |
| 11 | void rehash( ) 增加雜湊表的大小並重新雜湊其所有鍵。 |
| 12 | Object remove(Object key) 刪除鍵及其值。返回與鍵關聯的值。如果鍵不在雜湊表中,則返回 null 物件。 |
| 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