因此,例如,我们对所有自定义对象= 2(in bits =..10)的哈希值非常低。在相关的帖子中有这样一句话:"HashMap使用2的幂,因为你可以很容易地通过hashCode & MASK where MASK = 000....111来选择桶,其中1的数量==当前的幂2用于大小。“
因此,对于映射长度= 2,当大小为2时,我们有..10 & 01 = 0 -存储桶索引。对于大小= 4,我们将具有:..010 & 11 = 10(= 2dex) -大小为4的索引。对于大小= 8,我们将具有:..010 & 111 = 10(= 2dex) -同样对于大小为8。因此,在这个简单的情况下,对于相同的对象键,我们将有两个不同的存储桶。(一般来说,映射方法散列(Int hashCode)的作用相同-它可以为相同的对象散列生成不同的存储桶索引-取决于映射的大小-以处理低位上的冲突)。当你在map上执行get()时--它是否遍历了所有这些不同的存储桶--或者不是?或者如何跟踪对象散列所需的所有存储桶?
发布于 2016-03-10 20:43:45
每当调整HashMap的大小时,所有条目都会被重新散列,即,如果映射的新大小需要的话,它们将被移动到新的存储桶中。
因此,get()只需查找匹配搜索键的hashCode()和映射的当前大小的存储桶。
它是否遍历了适用于同一密钥的所有这些不同的存储桶?
在任何给定的时间点,对于给定的键,只有一个合适的存储桶(这取决于键的hashCode()和HashMap的当前大小)。
https://stackoverflow.com/questions/35916796
复制相似问题