密钥的哈希码如何依赖于哈希映射的容量

时间:2015-07-28 15:07:14

标签: java collections hashmap

当哈希映射填充负载系数(.75)的比例时,如果它超过它,容量将加倍并发生重新哈希导致重新排列条目。

在这种情况下,为什么任何键的哈希码都取决于哈希映射的容量,以便重新排列?如果任何密钥的哈希码是10(比如说),那么当哈希映射的容量发生变化时,它会怎样受到影响。

2 个答案:

答案 0 :(得分:6)

hashCode的容量增长时,HashMap不会改变。但是,当您必须将值(例如)503的hashCode映射到(例如)64个桶的HashMap时,您使用模数运算符(即hashCode() % 64),这将把你映射到#55桶。

HashMap的容量加倍到128个桶时,在同一hashCode(此时hashCode() % 128)上应用模数运算符会将相同的hashCode映射到一个不同的桶(桶#119)。

我简化了答案。模数不直接应用于hashCode。它适用于在hashCode上应用另一个内部散列函数的结果。但这并没有改变解释。

答案 1 :(得分:1)

基本上,您的存储分区索引基于哈希映射容量的大小。根据java doc方法索引返回桶索引I.e。

static into indexFor(int h,int length){  回归h& (长度-1) }