標籤

2013年3月18日 星期一

hashtable


1. How to put object into Hashtable?
2. How to retrieve object from Hashtable in Java?
3. How to reuse Hashtable by using clear()?
4. How to check if Hastable contains a particular value?
5. How to check if Hashtable contains a particular key?
6. How to traverse Hashtable in Java?
7. How to check if Hashtable is empty in Java?
8. How to Copy content of Hashtable into HashMap?
9. How to find size of Hashtable in Java?
10. How to get all values form hashtable in Java?
11. How to get all keys from hashtable in Java?
=====================================================================
哈希表的原始定義和基本原理各種數據結構教程上都有闡述.簡而言之,
哈希表之所以能夠實現根據關鍵字(典型的例子是一個字符串鍵值)來獲取記錄,是因為她在內部建立了記錄存儲位置-即內部數組中的索引號和關鍵字的一套對應關係f,
因而在查找時,只需根據這個映射關係f 找到給定鍵值K 對應的數f( K),就可直接從數組中取得目的數據Hashtable[K] = Hashtable.InternalArray[f(K)],而不必對數組進行遍歷和比較.這個對應關係f我們稱為哈希函數.


哈希函數f的兩個重要特點:
[1]哈希函數可以自定義,只要使得整數f(K)的範圍不超出哈希表內部存儲數組的上下界即可.
[2] K的取法有任意種,但f(K)只能固定在一個範圍,因此不同的關鍵字可能對應了相同的哈希值,形成了衝突.

需要注意的是哈希函數的運算和衝突的處理都需要係統開銷,尤其後者代價不菲.因此產生了兩個關鍵問題:如何設計函數f的算法,以及如何處理衝突,才能使得哈希表更加高效.

沒有留言:

張貼留言