gpt4 book ai didi

java - 散列复合对象

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:29 26 4
gpt4 key购买 nike

编辑:这个问题与按位运算符无关,不能用 Why are XOR often used in java hashCode() but another bitwise operators are used rarely? 回答。

我见过不同的对象哈希计算方法:

class A {
public B b;
public C c;

@Override
public boolean equals();
@Override
public int hashCode() {
return c.hashCode() ^ b.hashCode(); //XOR
return c.hashCode() + prime * b.hashCode(); // SUM
return Objects.hash(b,c); // LIB
}
}

好像LIB方法用的是SUM,但是为什么比XOR好呢?

虽然这个例子是用 Java 写的,但这个问题更多的是关于数学和概率的。

最佳答案

SUM 确保您使用哈希码的所有位来传播您的哈希(在此,一个 int 的 32 位),并且不假设 sub hashcode() 实现。

XOR 仅在 B 和 C 的哈希码具有相同属性时才具有相同的属性,否则它将仅使用 B 和 C 哈希码中“有用”位数的最小值,这可能导致更差的分布,并且更频繁的碰撞。如果 B 和 C 是往往非常小的整数,则很容易看出问题,您将只使用前几位(因为 int.hashcode() 是恒等函数)。

关于java - 散列复合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297100/

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