key 的 hash code 怎么取决于 Hash map 的容量

How come hash code of key depends up on the capacity of the Hash map

当Hash map以load factor(.75)的比例填充时,如果超过该比例,容量将翻倍并发生rehashing,导致条目重新排列。

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

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

HashMap 的容量加倍到 128 个桶时,对相同的 hashCode(这次 hashCode() % 128)应用取模运算符将映射相同的 hashCode 到另一个桶(桶 #119)。

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

基本上你的桶索引是基于你的哈希映射容量的大小。根据 java 文档方法 indexFor return 桶索引即

static 到 indexFor(int h, int length){ return h & (长度-1) }