1
Collections.sort(cells, new Comparator<MyCell>() {

        @Override
        public int compare(MyCell o1, MyCell o2) {
            if (o1.getX() <= o2.getX() && o1.getY() <= o2.getY()) {
                return -1;
            } else {
                return 1;
            }
        }

    });

这里是完整的堆栈跟踪:

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(Unknown Source)
at java.util.TimSort.mergeAt(Unknown Source)
at java.util.TimSort.mergeCollapse(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)

我知道有很多这样的问题,但我不明白为什么我的比较是错误的。getX() 和 getY() 返回一个 long。那么我该如何解决这个问题呢?

我已经搜索过了,但没有得到答案。

提前致谢。

4

1 回答 1

0

这是关于该主题的一个很好的答案。比较器必须是可传递的才能工作。否则,您将不会从初始项目的不同排序中获得相同的结果。

于 2013-05-06T15:04:54.797 回答