将Java哈希码合并为“主”哈希码

我有一个实现了hashCode()的向量类。它不是我写的,而是使用2个质数对2个向量分量进行异或运算。这里是:

    /*class Vector2f*/

...

public int hashCode()

{

return 997 * ((int)x) ^ 991 * ((int)y); //large primes!

}

…因为这是来自已建立的Java库,所以我知道它可以正常工作。

然后,我有一个Boundary类,其中包含2个向量:“开始”和“结束”(代表直线的端点)。这两个向量的值是边界的特征。

    /*class Boundary*/

...

public int hashCode()

{

return 1013 * (start.hashCode()) ^ 1009 * (end.hashCode());

}

在这里,我尝试为构成该边界的向量的唯一2元组(起点和终点)创建一个良好的hashCode()。我的问题:这个hashCode()实现会起作用吗?

(请注意,我在后面的hashCode()实现中使用了2个不同的质数;我不知道这是否有必要,但是我想避免共同因素时最好还是后悔,因为我想这是因为为什么素数在哈希函数中很受欢迎。)

回答:

这是正常的做法。在我看来,这很合理。如果您使用的是Eclipse,则应该会发现它可以为您生成equalshashCode为您生成-只需检查

Source 菜单即可。它将执行相同的操作-枚举您的字段并创建一个equals检查所有字段的方法,然后选择 n个

质数并完成创建hashCode方法。

以上是 将Java哈希码合并为“主”哈希码 的全部内容, 来源链接: utcz.com/qa/404603.html

回到顶部