7

我有一个代表具有唯一 Id 属性的 DB-Entries 的类。是否可以仅基于此属性实现equals()and方法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;
  }
4

3 回答 3

2

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

于 2013-03-15T15:56:19.667 回答
1

我看不出这段代码有什么问题。但是,您可能需要思考一些问题:

  • 您可以拥有多个相同的对象id吗?
  • 这个类会被子类化吗?
于 2013-03-15T15:56:49.400 回答
0

你在你的评论中说这个类是最终的,那么我会建议像 Integer.equals 这样的 equals 设计

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
于 2013-03-15T16:22:15.993 回答