这是C. Horstmann从Core Java中摘录的内容。+++++ hashCode方法应返回一个整数(可以为负数)。只需组合实例字段的哈希码,以使不同对象的哈希码很可能被广泛散布。例如,这是Employee类的hashCode方法:
class Employee
{
public int hashCode()
{
return 7 * name.hashCode() + 11 * new Double(salary).hashCode() + 13 * hireDay.hashCode();
}
. . .
}
+++
我听不懂这7、11和13。它们刚从帽子里拔出来吗?没有它们,结果(检查两个对象是否相等)似乎是相同的。
这些数字是质数。
您不想只添加哈希码,因为它会给您带来更多冲突。
例如
情况A:foo =“ bla”,bar =“ 111”
情况B:foo =“ 111”,bar =“ bla”
这意味着foo.hash() + bar.hash()
在两种情况下都将返回相同的值。您使用质数,因为如果p是质数> 2,则函数f:N / 2 ^ 32-> N / 2 ^ 32:x-> x * p(mod 2 ^ 32)是双射的。如果您乘以256 ...)
仅当您使用诸如哈希集之类的东西时才应避免冲突。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句