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

标签 java hashmap

例如,我们对所有自定义对象的哈希值都非常差 = 2(以位为单位 =..10)。相关帖子中的某处说道:“HashMap 使用两倍大小的幂,因为您可以通过 hashCode & MASK 轻松选择存储桶,其中 MASK = 000....111 其中 1 的数量 == 当前的幂2 用于尺寸。”

因此,对于映射长度 = 2,我们有 ..10 & 01 = 0 - 当大小为 2 时存储桶的索引。 对于 size = 4,我们将得到:..010 & 11 = 10(= 2dex) - 大小 4 的索引。 对于尺寸 = 8,我们将得到:..010 & 111 = 10(= 2dex) - 同样对于尺寸 8。 因此,在这个简单的情况下,我们将为同一个对象键拥有 2 个不同的存储桶。(一般来说,映射方法 hash(int hashCode) 会执行相同的操作 - 它可以为同一对象哈希生成不同的存储桶索引 - 取决于映射大小 - 来处理冲突在较低位)。当你在 map 上执行 get() 时,它是否会遍历所有适契约(Contract)一键的不同存储桶?或者如何跟踪对象哈希所需的所有存储桶?
Why hash method in HashMap

最佳答案

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

因此,get() 只需要查找与搜索键的 hashCode() 和 map 当前大小相匹配的存储桶。

does it go through all this different buckets suitable for the same key - or not?

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

关于java - HashMap.get() 是否检查多个哈希桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35916796/

相关文章:

java - JTextPane,文本/html 内容 : nested HTML element do not inherit font size?

java - 根据 JComboBox 中选定的项目显示数据库中的记录

java - 修改多个 Map 时避免 ConcurrentModificationException

java - 在 java 中对值进行分组并创建 HashMap 或列表

C:帮助理解指针

java - 3d 数组使用 Java.util.Scanner.nextInt() 将 null 作为输入

java - 帮助创建路径的文件库

java - 为什么 Velocity 不显示 <div >'s that should be displayed as "显示 : flex;"correctly?

Java:从 HashMap<String, List<String>> 中的给定键返回随机值

Java Hashmap迭代获取KeySet