为什么哈希表中键的哈希码取决于哈希表的容量?

3
当哈希映射填满负载因子(.75)的比例并且超过它时,容量将加倍并且重新散列会发生,这会导致条目的重新排列。
在这种情况下,任何键的哈希码如何取决于哈希映射的容量,以至于会发生重新排列呢?如果任何键的哈希码是10(例如),当哈希映射的容量变化时,它如何受到影响。
2个回答

6
hashCodeHashMap的容量增加时不会改变。然而,当您需要将值为503的hashCode映射到具有64个桶的HashMap时,您使用模运算符(即hashCode()%64),这将把您映射到第55个桶。
HashMap的容量增加到128个桶时,对同一hashCode(这次是hashCode()%128)应用模运算符将该hashCode映射到另一个桶(第119个桶)。
我稍微简化了一下答案。模运算不直接应用于hashCode上。它应用于在hashCode上应用另一个内部哈希函数的结果上。这并不改变解释。

1
基本上,您的桶索引是基于哈希表容量的大小。根据Java文档中的方法indexFor返回桶索引,即:
静态int indexFor(int h,int length){ 返回h&(length-1) }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接