如何实现根据部分顺序关系对其元素进行排序的
java.util.Comparator?
例如给定部分顺序关系a≺c,b≺c; a和b的顺序是未定义的.
由于比较器需要一个完整的排序,所以执行部分排序的元素是任意的但是一致的.
以下工作?
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 } }
这个比较器的订购是否传递?
(我担心这不是)
比较器是否需要传递?
(当在TreeMap中使用时)
>如何正确实现?
(如果上面的实现不起作用)
(Hashcodes可能会冲突,为了简化冲突,示例忽略冲突;有关哈希码的故障安全排序,请参阅Damien B’s answer至Impose a total ordering on all instances of *any* class in Java).