哈希表是壹種重要的存儲方式,也是壹種常見的檢索方法。其基本思想是將關系碼的值作為自變量,通過壹定的函數關系計算出對應的函數值,把這個數值解釋為結點的存儲地址,將結點存入計算得到存儲地址所對應的存儲單元。檢索時采用檢索關鍵碼的方法。現在哈希表有壹套完整的算法來進行插入、刪除和解決沖突。在Java中哈希表用於存儲對象,實現快速檢索。
Java.util.Hashtable提供了種方法讓用戶使用哈希表,而不需要考慮其哈希表真正如何工作。
哈希表類中提供了三種構造方法,分別是:
public Hashtable()
public Hashtable(int initialcapacity)
public Hashtable(int initialCapacity,float loadFactor)
參數initialCapacity是Hashtable的初始容量,它的值應大於0。loadFactor又稱裝載因子,是壹個0.0到1之間的float型的浮點數。它是壹個百分比,表明了哈希表何時需要擴充,例如,有壹哈希表,容量為100,而裝載因子為0.9,那麽當哈希表90%的容量已被使用時,此哈希表會自動擴充成壹個更大的哈希表。如果用戶不賦這些參數,系統會自動進行處理,而不需要用戶操心。
Hashtable提供了基本的插入、檢索等方法。
■插入
public synchronized void put(Object key,Object value)
給對象value設定壹關鍵字key,並將其加到Hashtable中。若此關鍵字已經存在,則將此關鍵字對應的舊對象更新為新的對象Value。這表明在哈希表中相同的關鍵字不可能對應不同的對象(從哈希表的基本思想來看,這也是顯而易見的)。
■檢索
public synchronized Object get(Object key)
根據給定關鍵字key獲取相對應的對象。
public synchronized boolean containsKey(Object key)
判斷哈希表中是否包含關鍵字key。
public synchronized boolean contains(Object value)
判斷value是否是哈希表中的壹個元素。
■刪除
public synchronized object remove(object key)
從哈希表中刪除關鍵字key所對應的對象。
public synchronized void clear()
清除哈希表
另外,Hashtalbe還提供方法獲取相對應的枚舉集合:
public synchronized Enumeration keys()
返回關鍵字對應的枚舉對象。
public synchronized Enumeration elements()
返回元素對應的枚舉對象。
例1.5 Hashtable.java給出了使用Hashtable的例子。
例1.5 Hashtalbe.java。
//import java.lang.*;
import java.util.Hashtable;
import java.util.Enumeration;
public class HashApp{
public static void main(String args[]){
Hashtable hash=new Hashtable(2,(float)0.8);
//創建了壹個哈希表的對象hash,初始容量為2,裝載因子為0.8
hash.put("Jiangsu","Nanjing");
//將字符串對象“Jiangsu”給定壹關鍵字“Nanjing”,並將它加入hash
hash.put("Beijing","Beijing");
hash.put("Zhejiang","Hangzhou");
System.out.println("The hashtable hash1 is: "+hash);
System.out.println("The size of this hash table is "+hash.size());
//打印hash的內容和大小
Enumeration enum1=hash.elements();
System.out.print("The element of hash is: ");
while(enum1.hasMoreElements())
System.out.print(enum1.nextElement()+" ");
System.out.println();
//依次打印hash中的內容
if(hash.containsKey("Jiangsu"))
System.out.println("The capatial of Jiangsu is "+hash.get("Jiangsu"));
hash.remove("Beijing");
//刪除關鍵字Beijing對應對象
System.out.println("The hashtable hash2 is: "+hash);
System.out.println("The size of this hash table is "+hash.size());
}
}
運行結果:
The hashtable hash1 is: {Beijing=Beijing, Zhejiang=Hangzhou, Jiangsu=Nanjing}
The size of this hash table is 3
The element of hash is: Beijing Hangzhou Nanjing
The capatial of Jiangsu is Nanjing
The hashtable hash2 is: {Zhejiang=Hangzhou, Jiangsu=Nanjing}
The size of this hash table is 2
Hashtable是Dictionary(字典)類的子類。在字典類中就把關鍵字對應到數據值。字典類是壹個抽象類。在java.util中還有壹個類Properties,它是Hashtable的子類。用它可以進行與對象屬性相關的操作。