簡體   English   中英

密鑰的哈希碼如何依賴於哈希映射的容量

[英]How come hash code of key depends up on the capacity of the Hash map

當哈希映射填充負載因子(.75)的比例並且如果它超過它時,容量將加倍並且發生重新散列,這導致條目的重新排列。

在這種情況下,為什么任何鍵的哈希碼都取決於哈希映射的容量,以便重新排列? 如果任何密鑰的哈希碼是10(比如說),那么當哈希映射的容量發生變化時,它會如何受到影響。

HashMap的容量增長時, hashCode不會改變。 但是,當您必須將值為(例如)503的hashCode映射到(例如)64個桶的HashMap時,您使用模數運算符(即hashCode() % 64 ),它將您映射到存儲桶#55 。

HashMap的容量加倍到128個桶時,在同一個hashCode上應用模數運算符(此時hashCode() % 128 )會將相同的hashCode映射到不同的桶(桶#119)。

我簡化了一下答案。 模數不直接應用於hashCode 它適用於在hashCode上應用另一個內部哈希函數的結果。 但這並沒有改變解釋。

基本上,您的存儲區索引基於哈希映射容量的大小。 按照java doc方法索引返回桶索引Ie

static into indexFor(int h,int length){return h&(length-1)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM