# 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接口中定義的方法外,還定義了以下方法:
| **方法** | **描述** |
| --- | --- |
| **void clear( )** | ?將此哈希表清空,使其不包含任何鍵。 |
| **Object clone( )** | 創建此哈希表的淺表副本。 |
| **boolean contains(Object value)** | ?測試此映射表中是否存在與指定值關聯的鍵。 |
| **boolean containsKey(Object key)** | 測試指定對象是否為此哈希表中的鍵。 |
| **boolean containsValue(Object value)** | 如果此 Hashtable 將一個或多個鍵映射到此值,則返回 true。 |
| **Enumeration elements( )** | 返回此哈希表中的值的枚舉。 |
| **Object get(Object key)** | ?返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回?null. 更確切地講,如果此映射包含滿足?(key.equals(k))?的從鍵?k?到值?v?的映射,則此方法返回?v;否則,返回?null。 |
| **boolean isEmpty( )** | 測試此哈希表是否沒有鍵映射到值。 |
| **Enumeration keys( )** | ?返回此哈希表中的鍵的枚舉。 |
| **Object put(Object key, Object value)** | 將指定?key?映射到此哈希表中的指定?value。 |
| **void rehash( )** | 增加此哈希表的容量并在內部對其進行重組,以便更有效地容納和訪問其元素。 |
| **Object remove(Object key)** | 從哈希表中移除該鍵及其相應的值。 |
| **int size( )** | ?返回此哈希表中的鍵的數量。 |
| **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
```
- Java 基礎
- Java 簡介
- Java開發環境配置
- Java基礎語法
- Java對象和類
- Java基本數據類型
- Java變量類型
- Java修飾符
- Java運算符
- Java循環結構 - for, while 及 do...while
- Java分支結構 - if...else/switch
- Java Number類
- Java Character類
- Java String類
- Java StringBuffer和StringBuilder類
- Java 數組
- Java 日期時間
- Java正則表達式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 異常處理
- Java 面向對象
- Java 繼承
- Java 重寫(Override)與重載(Overload)
- Java 多態
- Java 抽象類
- Java 接口
- Java 包(package)
- Java 高級教程
- Java 數據結構
- Java Enumeration接口
- Java Bitset類
- Java Vector 類
- Java Stack 類
- Java Dictionary 類
- Java Hashtable 接口
- Java Properties 接口
- Java 集合框架
- Java 泛型
- Java序列化
- Java 網絡編程
- Java 發送郵件
- Java 多線程編程
- Java Applet基礎
- Java 文檔注釋
- Servlet 教程
- Servlet 簡介
- Servlet 環境設置
- Servlet 生命周期
- Servlet 實例
- Servlet 表單數據
- Servlet 客戶端 HTTP 請求
- Servlet 服務器 HTTP 響應
- Servlet HTTP 狀態碼
- Servlet 編寫過濾器
- Servlet 異常處理
- Servlet Cookies 處理
- Servlet Session 跟蹤
- Servlet 數據庫訪問
- Servlet 文件上傳
- Servlet 處理日期
- Servlet 網頁重定向
- Servlet 點擊計數器
- Servlet 自動刷新頁面
- Servlet 發送電子郵件
- Servlet 包
- Servlet 調試
- Servlet 國際化
- JSP 基礎
- JSP 簡介
- JSP 開發環境搭建
- JSP 結構
- JSP 生命周期
- JSP 語法
- JSP 指令
- JSP 動作元素
- JSP 動作元素
- JSP 隱含對象
- JSP 客戶端請求
- JSP 服務器響應
- JSP HTTP 狀態碼
- JSP 表單處理
- JSP 過濾器
- JSP Cookies 處理
- JSP Session
- JSP 文件上傳
- JSP 日期處理
- JSP 頁面重定向
- JSP 點擊量統計
- JSP 自動刷新
- JSP 發送郵件
- JSP 高級教程
- JSP 標準標簽庫(JSTL)
- JSP 連接數據庫
- JSP XML 數據處理
- JSP JavaBean
- JSP 自定義標簽
- JSP 表達式語言
- JSP 異常處理
- JSP 調試
- JSP 國際化
- 免責聲明