我有一个 HashMap。其中有 16 个桶(默认情况下)。现在是否有可能具有不同 hashCode 的两个键属于同一个桶?或者总是为不同的 hashCode 创建一个新的桶,并且 HashMap 以这种方式扩展桶的大小?
看了很多帖子,自己却一头雾水。
最佳答案
是的,这是可能的。由于桶的数量远小于可能的 hashCodes
数量(桶的数量与 HashMap
中的条目数量成正比,而可能的 hashCodes
是可能的 int
值的数量,它更大),hashCode
到桶的最终映射是由一些模数运算符完成的,因此多个 hashCodes
可能会映射到同一个桶(例如,如果您有 16 个桶,则 hashCodes
1 和 17 都将映射到同一个桶(注意hashCode
不是指 hashCode
方法返回的值,因为 HashMap
在 hashCode< 上应用了一个附加函数
以改进散列码的分布))。
这就是为什么 hashCode
本身不足以确定我们要查找的键是否存在于映射中 - 我们还必须使用 equals
。
关于java - 具有不同 hashCode 的两个键是否可以成为 Java 中 HashMap 中同一存储桶的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097428/