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

Ram*_*son 3 java collections hashmap

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

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

Era*_*ran 6

hashCode当不改变HashMap的容量也不断增长.但是,当您必须将hashCode其值(例如)503 映射到HashMap(例如)64个桶中时,您可以使用模数运算符(即hashCode() % 64),它将您映射到存储桶#55.

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

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