将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,则应该会发现它可以为您生成equals
并hashCode
为您生成-只需检查
Source 菜单即可。它将执行相同的操作-枚举您的字段并创建一个equals
检查所有字段的方法,然后选择 n个
质数并完成创建hashCode
方法。
以上是 将Java哈希码合并为“主”哈希码 的全部内容, 来源链接: utcz.com/qa/404603.html