2009-07-02 127 views
0

关于这个问题(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是唯一的。我对吗 ?

在此先感谢

+0

如果结果是1,为什么你会因结果而m ly。你的功能实际上是“返回31 + ID;”。 – Tom 2009-07-02 14:26:28

+0

顺便说一句,你可能会摆脱31,因为它不会改变id的分布。简而言之,你实现的hashcode没有做任何特殊的事情,你应该只返回id。话虽如此,我不确定什么是“更好”。 – Tom 2009-07-02 14:28:12

回答

5

这不是ID的唯一性,这使得这是正确的事情 - 这是事实,这是用于平等检查,它是只有东西用于相等性检查。

来自Eclipse的样板实际上只有在您使用多个字段进行平等时才有意义。

3

如果你的目标身份的独特性则绝对是的。

请记住,由于您可能(可能)不是通过散列函数的可能范围(即int的所有值)随机分布值,因此性能可能成为任何依赖散列的代码的问题均匀分布。

P.s.这“可能”来自我的假设,这些独特的整数可能是你的数据库中的身份值。如果他们真的是随机分布的,请忽略我的警告。

+0

是的,这当然是我的目标。谢谢 – 2009-07-02 14:18:28