java – 部分有序比较器
发布时间:2020-12-14 17:48:00 所属栏目:Java 来源:网络整理
导读:如何实现根据部分顺序关系对其元素进行排序的 java.util.Comparator? 例如给定部分顺序关系a?c,b?c; a和b的顺序是未定义的. 由于比较器需要一个完整的排序,所以执行部分??排序的元素是任意的但是一致的. 以下工作? interface Item { boolean before(Item o
如何实现根据部分顺序关系对其元素进行排序的
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 } } 这个比较器的订购是否传递? 解决方法
问题在于,当您具有无与伦比的元素时,您需要比比较哈希码更清晰.例如,给定部分阶{a< b,c < d},哈希码可以满足h(d) h(b) h(c) h(a),这意味着,b < c < d < a(粗体表示由哈希代码断开的连接),这将导致TreeMap的问题. 一般来说,除了事先对钥匙进行拓扑分类外,您可能没有什么可做的,因此欢迎有关您感兴趣的部分订单的详细信息.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |