鉴于以下实现等于:
public class Test implements Comparable<Test> {
private int x, y;
@Override
public boolean equals(Object obj) {
if (obj instanceof Test) {
Test other = (Test) obj;
return x == other.x || y == other.y;
}
return false;
}
@Override
public int hashCode() {
//implementation?
}
@Override
public int compareTo(Test o) {
//implementation?
}
}
hashCode和compareTo的正确/最佳性能实现是什么? 请注意 - equals使用 OR ,而非 AND
答案 0 :(得分:4)
equals()方法用于确定两个对象的相等性。
当我们说平等时,它应该遵循以下属性,
反身:总是,a = a。在Java中,a.equals(a)应该始终为真。
对称:如果a = b,则b = a。在Java中,如果a.equals(b)为真,则b.equals(a)应该为真。
传递性:如果a = b且b = c,则a = c。在Java中,如果a.equals(b)和b.equals(c)为真,则a.equals(c)应该为真。
你的等于()并不违反这条规则。
此外根据 javadoc - 强烈建议(尽管不要求)自然排序与equals一致。这是因为没有显式比较器的有序集(和有序映射)表现得很奇怪&#34;当它们与自然排序与equals 不一致的元素(或键)一起使用时。因此,在自然排序
的同时,使用equals()的实现可能会遇到一些问题在Java中重写equals方法的好方法