Comparison method violates its general contract!
之前项目上遇到的问题,从jdk6换到了jdk7,后台日志疯狂输出java.lang.IllegalArgumentException: Comparison method violates its general contract!
查阅资料得知,,在JDK7以后,实现Comparable接口实现自定义排序的时候,要满足一下三个特性:
- 自反性:x,y 的比较结果和 y,x 的比较结果相反。
- 传递性:x>y,y>z,则 x>z。
- 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。
原因就是代码写的不严谨导致的,下面有两种解决方法:
方法一(推荐)
对代码做检查,对没有对null和0等不对称的判断的比较器加以完善。
方法二(不推荐)
设置System属性
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true")
或者设置JVM参数
-Djava.util.Arrays.useLegacyMergeSort=true