【发布时间】:2011-02-25 23:11:18
【问题描述】:
我有一个实现了 hashCode() 的向量类。它不是我写的,而是使用 2 个质数乘以 2 个向量分量,然后再对它们进行异或运算。这里是:
/*class Vector2f*/
...
public int hashCode()
{
return 997 * ((int)x) ^ 991 * ((int)y); //large primes!
}
...由于这是来自已建立的 Java 库,我知道它工作得很好。
然后我有一个 Boundary 类,它包含 2 个向量,“start”和“end”(代表一条线的端点)。这两个向量的值就是边界的特征。
/*class Boundary*/
...
public int hashCode()
{
return 1013 * (start.hashCode()) ^ 1009 * (end.hashCode());
}
在这里,我尝试为构成此边界的唯一 2 元组向量(开始和结束)创建一个好的 hashCode()。我的问题:这个 hashCode() 实现会起作用吗?
(请注意,我在后面的 hashCode() 实现中使用了 2 个不同的素数;我不知道这是否有必要,但在尝试避免常见因素时,安全总比抱歉要好,我猜——因为我假设这就是为什么素数在散列函数中很受欢迎。)
【问题讨论】: