如何实现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
必须是可传递的吗?
(当用于 a 时TreeMap
)- 如何正确实施?
(如果上面的实现不起作用)
(哈希码可能会发生冲突,为简单起见,示例会忽略冲突;请参阅Damien B对在 Java 中对 *any* 类的所有实例实施总排序以对哈希码进行故障安全排序的回答.)