我有一个实现了hashCode()的vector类.它不是由我编写的,而是使用2个素数来乘以2个向量分量,然后对它们进行异或运算.这里是:
/*class Vector2f*/
...
public int hashCode()
{
return 997 * ((int)x) ^ 991 * ((int)y); //large primes!
}
Run Code Online (Sandbox Code Playgroud)
...因为这是来自一个已建立的Java库,我知道它的工作正常.
然后我有一个Boundary类,它包含2个向量,"start"和"end"(表示一行的端点).这两个向量的值是边界的特征.
/*class Boundary*/
...
public int hashCode()
{
return 1013 * (start.hashCode()) ^ 1009 * (end.hashCode());
}
Run Code Online (Sandbox Code Playgroud)
在这里,我试图为构成这个边界的唯一2元组向量(开始和结束)创建一个好的hashCode().我的问题:这个hashCode()实现是否有效?
(请注意,我在后一个hashCode()实现中使用了2个不同的素数;我不知道这是否有必要但是为了安全而不是为了避免常见因素更好,我猜 - 因为我认为这是为什么素数在散列函数中很受欢迎.)
Sam*_*war 17
这是正常做法.这看起来很合理.如果你使用Eclipse,你会发现,它可以产生equals和hashCode你,只是检查源菜单.它将执行相同的操作 - 枚举您的字段并创建一个equals检查所有字段的方法,然后选择n素数并执行您为创建hashCode方法所做的操作.
| 归档时间: |
|
| 查看次数: |
9548 次 |
| 最近记录: |