Kas*_*erg 12 java sorting algorithm
如何实现java.util.Comparator根据偏序关系对其元素进行排序?
例如,给定的部分顺序关系一个 ≺ Ç,b ≺ Ç ; 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
}
}
Run Code Online (Sandbox Code Playgroud)
Comparators需要传递?TreeMap)问题是,当你拥有无法比较的元素时,你需要回到比比较哈希码更聪明的东西.例如,给定部分顺序{a <b,c <d},哈希码可以满足h(d)<h(b)<h(c)<h(a),这意味着a <b < c <d < a(粗体表示由哈希码破坏的绑定),这将导致a的问题TreeMap.
一般来说,除了事先对键进行拓扑排序之外,您可能无需做任何事情,因此欢迎您关注部分顺序的一些细节.