鉴于大家搜索是为了解决问题,这里我先提供解决方案:
1.给jvm添加启动参数。
-Djava.util.Arrays.useLegacyMergeSort=true
2.在排序方法之前添加如下代码:
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
3.修改比较方法,自己写的比较器只写了1和-1的情况,而没有写0。
PS:数组的大小必须大于等于32.小于32时不会出现java.lang.IllegalArgumentException异常.原因是:java中默认的MIN_MERGE为32.若待排序的数组小于MIN_MERGE时,会使用Binary Sort,而不会使用TimSort.
这个排序导致的异常将会在java7以上的版本出现,所以如果你的JDK从6升级到了7或者8,那一定要小心此异常。
在java7的兼容列表中,就有对此排序不兼容的说明:
Area: API: Utilities
Synopsis: Updated sort behavior for Arrays and Collections may throw an IllegalArgumentException
Description: The sorting algorithm used by java.util.Arrays.sort and (indirectly) b