【发布时间】:2015-12-17 18:53:21
【问题描述】:
与使用equals和hashcode相比,执行实现是不是一个坏主意(可能会有我忽略的后果)?我不关心元素的顺序,我只需要排序是确定性的。这当然是假设我的等号和哈希码是正确的。
这是我的 compareTo 的样子
@Override
public int compareTo(DividendEvent other) {
final int BEFORE = -1;
final int EQUAL = 0;
final int AFTER = 1;
if(other == null){
return BEFORE;
}
else if (this.equals(other)){
return EQUAL;
}
else if (this.hashCode()>other.hashCode()){
return AFTER;
}
else{
return BEFORE;
}
}
【问题讨论】:
-
您是否实现了
hashCode方法以考虑某种排序? -
真的没有比 hashcode 更好的比较属性了吗?
-
坏主意 -
equals很好,但hashCode不能保证也不预期是唯一的,它只是为了“桶”。即使你实现它是唯一的,它也不再是一个好的 hashCode。 -
没错,但你为什么要做这样的事情呢?这仅对通过它们的 hashCode 排序对象有用......我看不到任何价值
-
我需要他们订购,但并不真正关心订单是什么。如果我重新创建列表,我要填充这些对象,我需要与之前的值进行比较,因此在比较列表之前需要对它们进行排序。
标签: java collections compare