4
A hastable
在要存儲的對象上使用一些散列函數。Java字符串:hashcode實際上是散列值嗎?
這個散列函數本質上是計算表中對象的位置。
如果我們使用HashTable
或HashMap
並且大小不能適應更多元素,那麼這些集合的大小將調整爲適應更多元素。
這意味着每個存儲的元素必須重新計算新的更大的表中的新位置。
我的問題是以下(即上面是正確的):
我讀到String
計算其hashcode
的,因爲它不使用它的商店和額外的hashvalue
內部(緩存)存儲的字符以獲得最佳性能不必重新計算。
這是我沒有得到的部分。如果hashcode
是基於String
存儲的字符,那麼hashtable
中的位置是如何計算的?
是否有一些額外的邏輯使用hashcode
String
?所以String
的hashcode
其實不是hashvalue
?
請注意,由於長度總是2的冪,所以'h&(length - 1)'相當於'h%length'(這可能是很多學生學習如何解決他們的哈希桶問題數據結構課程)。 – erickson
@erickson:對不起。爲什麼'&'與'%'相同?我沒有那樣做。 – Cratylus
(實際上'%'會給'h'的一半給出錯誤的答案。)@ user384706這只是一點點。在二進制中查看兩個減1的冪。 –