这是天真的等于,哈希码可以吗?

我有一个表示具有唯一Id属性的DB-Entries的类。 只有基于这个属性才能实现equals()hashcode()方法

  @Override public int hashCode()
  { return id;
  }

  @Override public boolean equals(Object obj)
  {
    if (this == obj)                  return true;
    if (obj == null)                  return false;
    if (getClass() != obj.getClass()) return false;
    Task other = (Task) obj;
    if (id != other.id)
      return false;
    return true;
  }

一般来说,是的。 如果所有ID都是连续的小整数,则可以通过使用在整个可用32位中更广泛地分布位的函数从大集合中获得更好的性能。 但是,这应该找到其他方式。


我没有看到这个代码有什么问题。 但是,您可能想要思考一些问题:

  • 你可以有多个对象具有相同的id吗?
  • 这个班是否会被分类?

  • 使用id建立平等的问题是您可能想要将尚未分配id的对象与具有id的对象进行比较。 在那种情况下,equals和hashCode方法必须使用使对象唯一的业务字段(“业务键”)。

    NPE表示,还要比较类而不是使用instanceof规则。

    这个代码是可以忍受的,这不是我喜欢的做事方式。 对于简单的情况它是过度的,由Object定义的hashCode和equals方法将完成工作。 对于更高级的领域模型来说,这是不够的,因为业务关键字的子类化和比较实际上是有用的。

    链接地址: http://www.djcxy.com/p/12399.html

    上一篇: Is this naive equals, hashcode OK?

    下一篇: Understanding Python fork and memory allocation errors