java - 具有不同 hashCode 的两个键是否可以成为 Java 中 HashMap 中同一存储桶的一部分?

标签 java hashmap bucket

我有一个 HashMap。其中有 16 个桶(默认情况下)。现在是否有可能具有不同 hashCode 的两个键属于同一个桶?或者总是为不同的 hashCode 创建一个新的桶,并且 HashMap 以这种方式扩展桶的大小?

看了很多帖子,自己却一头雾水。

最佳答案

是的,这是可能的。由于桶的数量远小于可能的 hashCodes 数量(桶的数量与 HashMap 中的条目数量成正比,而可能的 hashCodes 是可能的 int 值的数量,它更大),hashCode 到桶的最终映射是由一些模数运算符完成的,因此多个 hashCodes 可能会映射到同一个桶(例如,如果您有 16 个桶,则 hashCodes 1 和 17 都将映射到同一个桶(注意hashCode 不是指 hashCode 方法返回的值,因为 HashMaphashCode< 上应用了一个附加函数 以改进散列码的分布))。

这就是为什么 hashCode 本身不足以确定我们要查找的键是否存在于映射中 - 我们还必须使用 equals

关于java - 具有不同 hashCode 的两个键是否可以成为 Java 中 HashMap 中同一存储桶的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097428/

相关文章:

java - 这个 if 语句会抛出异常还是忽略它?

java - 关于android开发中使用java语法的问题

java - 通过 Java 中的流复制数组的每个元素

c++ - 我如何以无序和可变的方式使用 boost::bimap?

java - HashMap 中可以存储的键(对象)数量的理论限制?

java - 为什么 hashcode() 返回一个整数而不是长?

java - Jersey 将我的 mysql 时间戳写为 2011-09-28T21 :48:25Z how do I format it in Java?

java - 当值的哈希集为空时删除 HashMap 中的键

java - Google Cloud 端点存储桶下载器

python - 如何检查 AWS S3 存储桶是否存在?