重定义equals()

麦可

这是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章