[英]Java String: Is hashcode actually the hashvalue?
hastable
在對象上使用一些哈希函數進行存儲。
該散列函數實質上是計算對象在表中的位置。
如果我們使用HashTable
或HashMap
並且大小不能容納更多元素,則將調整這些集合的大小以容納更多元素。
這意味着必須重新存儲每個存儲的元素以計算新的更大表中的新位置。
我的問題是以下(以上是正確的):
我讀到String
通過使用其存儲的字符來計算其hashcode
,此外,該hashvalue
值在內部存儲(緩存)以獲得最佳性能,因為不必重新計算它。
這是我不了解的部分。如果hashcode
基於String
存儲的字符,那么hashtable
的位置如何計算?
使用String
的hashcode
是否有其他邏輯? 所以String
的hashcode
是不實際的hashvalue
?
哈希碼未更改。 僅內部表中的位置。 打開HashMap
並查看:
static int indexFor(int h, int length) {
return h & (length-1);
}
表(實際上是數組)中的索引是根據哈希和數組的大小確定的。
因此,當“重新哈希”發生時,它使用相同的哈希碼,但長度不同,這意味着該元素將放入不同的存儲桶中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.