[英]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.