当哈希映射填充负载系数(.75)的比例时,如果它超过它,容量将加倍并发生重新哈希导致重新排列条目。
在这种情况下,为什么任何键的哈希码都取决于哈希映射的容量,以便重新排列?如果任何密钥的哈希码是10(比如说),那么当哈希映射的容量发生变化时,它会怎样受到影响。
答案 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) }