【问题标题】:How come hash code of key depends up on the capacity of the Hash map密钥的哈希码如何取决于哈希映射的容量
【发布时间】:2015-07-28 15:07:14
【问题描述】:

当Hash map被填充到负载因子(.75)的比例时,如果超过了,容量会翻倍,并发生rehashing,导致条目重新排列。

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

【问题讨论】:

    标签: java collections hashmap


    【解决方案1】:

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

    HashMap 的容量翻倍到 128 个桶时,对同一 hashCode(这次是 hashCode() % 128)应用模运算符会将同一 hashCode 映射到不同的桶(桶 #119) .

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

    【讨论】:

      【解决方案2】:

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

      静态转换为 indexFor(int h, int length){ 返回 h & (length-1) }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多