比较器错误 java.lang.IllegalArgumentException
Comparator Error java.lang.IllegalArgumentException
如何根据设置的位数对数组进行排序?我在代码下方遇到错误:
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)
如何解决这个问题?
你永远不会 return 0
,即使元素是相等的。对于简单的排序方法,通常使用 Comparator.comparing
方法更好。
Arrays.sort(arr, Comparator.comparingInt(Integer::bitCount).reversed());
如何根据设置的位数对数组进行排序?我在代码下方遇到错误:
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)
如何解决这个问题?
你永远不会 return 0
,即使元素是相等的。对于简单的排序方法,通常使用 Comparator.comparing
方法更好。
Arrays.sort(arr, Comparator.comparingInt(Integer::bitCount).reversed());