相关疑难解决方法(0)

TimSort什么时候抱怨破坏的比较器?

Java 7 更改了排序算法,使其抛出一个

java.lang.IllegalArgumentException:"比较方法违反了它的一般合同!"

在某些情况下,使用的比较器是有缺陷的.是否可以判断比较器中的哪种错误导致这种情况?在我的实验中,如果x!= x无关紧要,如果x <y和y <z但z <x也没关系,但是如果x = y且y = z但是x <z对于某些值确实很重要x,y,z.这通常是这样吗?

(如果对此有一般规则,可能更容易在比较器中查找错误.但当然最好修复所有错误.:-))

特别是,以下两个比较器没有让TimSort抱怨:

    final Random rnd = new Random(52);

    Comparator<Integer> brokenButNoProblem1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o1 < o2) {
                return Compare.LESSER;
            } else if (o1 > o2) {
                return Compare.GREATER;
            }
            return rnd.nextBoolean() ? Compare.LESSER : Compare.GREATER;
        }
    };

    Comparator<Integer> brokenButNoProblem2 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o1 == o2) …
Run Code Online (Sandbox Code Playgroud)

java timsort java-7

5
推荐指数
1
解决办法
1421
查看次数

标签 统计

java ×1

java-7 ×1

timsort ×1