Hashtable和HashMap對象

       Hashtable和HashMap對象可以讓你把一個key和一個value結合起來,並用put() 方法把這對key/value輸入到表中。然後你可以通過調用get()方法,把key作爲參數來得到這個value(值)。只要滿足兩個基本的要求,key和value可以是任何對象。注意,因爲key和value必須是對象,所以原始類型(primitive types)必須通過運用諸如Integer(int)的方法轉換成對象。

       爲了將一個特定類的對象用做一個key,這個類必須提供兩個方法,equals() 和 hashCode()。這兩個方法在java.lang.Object中,所以所有的類都可以繼承這兩個方法;但是,這兩個方法在Object類中的實現一般沒什麼用,所以你通常需要自己重載這兩個方法。

       Equals()方法把它的對象同另一個對象進行比較,如果這兩個對象代表相同的信息,則返回true。該方法也查看並確保這兩個對象屬於相同的類。如果兩個參照對象是完全一樣的對象,Object.equals()返回true,這就說明了爲什麼這個方法通常不是很適合的原因。在大多數情況下,你需要一個方法來一個字段一個字段地進行比較,所以我們認爲代表相同數據的不同對象是相等的。

       HashCode()方法通過運用對象的內容執行一個哈希函數來生成一個int值。Hashtable和HashMap用這個值來算出一對key/value位於哪個bucket(哈希元)(或列表)中。


       Put()方法接受兩個參數,它們都屬於Object類型。第一個參數是key;第二個參數是value。Put()方法調用key的hashCode()方法,用表中的列表數來除這個結果。把餘數作爲索引值來確定該條記錄添加到哪個列表中。注意,key在表中是唯一的;如果你用一個已經存在的key來調用put(),匹配的條目就被修改了,因此它參照的是一個新的值,而舊的值被返回了(當key在表中不存在時,put()返回空值)。

      另一個有用的方法是remove(),其用法同get()幾乎一樣,它把條目從表中刪除,並返回給調用程序。

       影響hashtable功效的主要因素就是表中列表的平均長度,因爲平均搜索時間與這個平均長度直接相關。很顯然,要減小平均長度,你必須增加hashtable中列表的數量;如果列表數量非常大,以至於大多數列表或所有列表只包含一條記錄,你就會獲得最佳的搜索效率。然而,這樣做可能太過分了。如果你的hashtable的列表數遠遠多於數據條目,那你就沒有必要做這樣的內存花費了,而在一些情況下,人們也不可能接受這樣的做法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章