我的团队正在处理的代码有几个类,其中equals
和hashCode
未在类层次结构中定义。我们希望实施Comparable
,以便compareTo
与使用equals
的{{1}}保持一致,如下所示:
hashCode
这被视为实施class MyClass implements Comparable<MyClass>
{
private String myProperty;
// Other properties, etc.
....
public int compareTo(MyClass obj) {
// Natural ordering comparisons
...
// Reach here if natural ordering properties are equivalent
return new Integer(this.hashCode()).compareTo(new Integer(obj.hashCode());
}
}
的有效方式吗?使用我应该注意的默认Comparable
实现是否存在任何缺陷?
更新:我们正在努力的行为如下:
hashCode
。答案 0 :(得分:0)
不,这不是实施Comparable的有效方法。因为,假设MyClass
方法中equals
的两个不同对象的所有自然排序比较都成立,那么当比较两个对象的哈希码时,它将返回false
。这是因为在这种情况下,默认情况下将调用hashcode
类的Object
方法(因为您没有提供自己的哈希码方法),这对于不同的对象将是不同的。因此,无论所有自然排序比较是true
,MyClass的两个对象永远不会相等。
答案 1 :(得分:0)
是的,这是一种有效的方法。显然你想要对其他值相等的对象进行固定排序(我是对的吗?你没有用这里的哈希码用法解释你的目标)。 我唯一要做的就是在compareTo方法中复制Integer.compareTo()的java代码,这样就不必为每次比较创建2个整数。