Exception in thread “main” java.lang.IllegalArgumentException: Comparison method violates its general contract!at java.util.TimSort.mergeLo(TimSort.java:777)at java.util.TimSort.mergeAt(TimSort.java:514)at java.util.TimSort.mergeCollapse(TimSort.java:439)at java.util.TimSort.sort(TimSort.java:245)at java.util.Arrays.sort(Arrays.java:1512)at java.util.ArrayList.sort(ArrayList.java:1462)at java.util.Collections.sort(Collections.java:175)at com.applabel.utils.SortList.getSortList(SortList.java:38)at com.applabel.utils.SortList.main(SortList.java:22)
3、分析原因:
在JDK7以后,实现Comparable接口后,要满足一下三个特性:1) 自反性:x,y 的比较结果和 y,x 的比较结果相反。
2) 传递性:x>y,y>z,则 x>z。
3) 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。
参考
实现Comparable接口报错:Comparison method violates its general contract!