哈希码实现

时间:2009-07-02 14:15:01

标签: java

关于这个问题(Efficient hashCode() implementation),我还有一个问题。

我有一个“值”类,其实例保存在数据库中。因此,该类的实例都具有唯一的ID。

因此,我只需返回此id即可实现哈希码方法(以及相关的equals方法)。

当使用Eclipse哈希码生成器并告诉Eclipse仅使用ID属性进行生成时,我有以下方法:

    @Override
    public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + id;
            return result;
    }

我认为简单地返回id更有效率,因为我知道这个id是唯一的。我是对的吗?

提前致谢

2 个答案:

答案 0 :(得分:5)

这不是ID的唯一性,这使得这是正确的事情 - 它是用于等式检查的事实,它是用于等式检查的唯一的事物。

当您使用多个字段进行相等时,Eclipse中的样板实际上才是相关的。

答案 1 :(得分:3)

如果你的目标是身份唯一性那么绝对是的。

请记住,因为您(可能)不会通过哈希函数的可能范围(即int的所有值)随机分布您的值,对于依赖于哈希的任何代码而言,性能可能是一个问题均匀分布。

P.S。 “可能”来自我的假设,即这些唯一的int可能是你的数据库中的身份值。如果它们真的是随机分布的,请忽略我的警告。