gpt4 book ai didi

java - 为什么java hashcode 实现31 * x + y 比x + y 好?

转载 作者:行者123 更新时间:2023-12-01 10:51:10 25 4
gpt4 key购买 nike

我对关于哪种哈希码实现更好的 Java 面试问题感到困惑。我们有一个类 Point {int x, y; }.为什么这个类的 hashcode 31 * x + y 的实现比 x + y 好?正确的答案是“乘数创建了哈希码值对字段处理顺序的依赖,这最终会产生更好的哈希函数”。但我不明白为什么处理的顺序是这里的重点,因为当我执行 point1.equals(point2); 时,整个表达式 31 * x + y 正在计算;并且无论它以何种顺序发生。我错了吗?

最佳答案

如果您使用 x+y那么如何区分点(3,4)和(4,3)呢?两者都将具有相同的哈希码...

现在 31 * x + y不会是完美的,在同样的情况下,它会好得多。

注意:根据散列的定义,没有完美的散列。唯一的事情是分析给定散列函数发生了什么样的冲突。在几何情况下,第一个为非常简单和常用的对称属性引入了碰撞。因此,在非常常见的情况下,可能会有太多的冲突。

关于java - 为什么java hashcode 实现31 * x + y 比x + y 好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61317559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com