部分有序比较器
如何实现根据偏序关系对其元素进行排序?java.util.Comparator
例如,给定一个偏序关系 a ≺ c, b ≺ c;a 和 b 的顺序未定义。
由于需要完全排序,因此实现对部分排序未任意定义但一致的元素进行排序。Comparator
以下方法是否有效?
interface Item {
boolean before(Item other);
}
class ItemPartialOrderComperator implements Comparator<Item> {
@Override
public int compare(Item o1, Item o2) {
if(o1.equals(o2)) { // Comparator returns 0 if and only if o1 and o2 are equal;
return 0;
}
if(o1.before(o2)) {
return -1;
}
if(o2.before(o1)) {
return +1;
}
return o1.hashCode() - o2.hashCode(); // Arbitrary order on hashcode
}
}
- 此比较器的排序是否可传递?
(恐怕不是) - 是否需要可传递?
(在树状图
中使用时)Comparators
- 如何正确实现它?
(如果上面的实现不起作用)
(哈希码可以碰撞,为简单起见,该示例会忽略碰撞;请参阅Damien B对Java中*any*类的所有实例施加总排序的答案,以便对哈希码进行故障安全排序。