HashMap.get()是否检查多个哈希桶

时间:2016-03-10 12:40:51

标签: java hashmap

因此,例如,我们对所有自定义对象= 2(in bits =..10)的哈希值非常差。在相关帖子的某处说:" HashMap使用两种大小的功能,因为你可以通过hashCode& amp;掩码MASK = 000....111,其中1s的数量= = 2的当前功率用于大小。 "

因此,对于map length = 2,我们有..10 & 01 = 0 - 当size为2时,bucket的索引。 对于size = 4,我们将:..010 & 11 = 10(= 2dex) - 大小为4的索引。 对于size = 8,我们将:..010 & 111 = 10(= 2dex) - 大小为8。 因此,在这种简单的情况下,我们将为相同的对象键提供2个不同的桶。(一般地图方法散列(int hashCode)也是如此 - 它可以为同一个对象散列生成不同的桶索引 - 取决于映射大小 - 来处理冲突在低位)。当你在地图上执行get()时 - 它是否会通过适用于同一个键的所有这些不同的桶 - 或者不是?或者如何跟踪对象哈希所需的所有桶? Why hash method in HashMap

1 个答案:

答案 0 :(得分:2)

每当调整HashMap的大小时,所有条目都会被重新散列,即如果地图的新大小需要,则将它们移动到新的存储桶。

因此,get()只需要查找与搜索到的密钥的hashCode()匹配的存储区以及地图的当前大小。

  

它是否经历了适用于同一个键的所有这些不同的桶 - 或者不是?

在任何给定的时间点,给定密钥只有一个合适的存储桶(取决于密钥的hashCode()HashMap的当前大小。)