【问题标题】:Comparator Error java.lang.IllegalArgumentException [closed]比较器错误 java.lang.IllegalArgumentException [关闭]
【发布时间】:2021-06-20 15:39:10
【问题描述】:

如何根据设置位数对数组进行排序?我在以下代码中遇到错误:

Arrays.sort(arr, (o1, o2) -> {
    if (Integer.bitCount(o1) <=  Integer.bitCount(o2))
        return 1;
    return -1;
});

例外:

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.base/java.util.TimSort.mergeLo(TimSort.java:781)
    at java.base/java.util.TimSort.mergeAt(TimSort.java:518)
    at java.base/java.util.TimSort.mergeCollapse(TimSort.java:448)
    at java.base/java.util.TimSort.sort(TimSort.java:245)
    at java.base/java.util.Arrays.sort(Arrays.java:1441)
    at Compute.sortBySetBitCount(File.java:44)
    at GFG.main(File.java:23)

如何解决这个问题?

【问题讨论】:

标签: java comparator


【解决方案1】:

即使元素相等,您也永远不会返回 0。对于简单的排序方法,使用Comparator.comparing 方法通常更好。

Arrays.sort(arr, Comparator.comparingInt(Integer::bitCount).reversed());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多