Collections.sort()报Comparison method violates its general contract异常解决方法
记录下之前调用Collections.sort()造成App Crash的例子。业务原因,需要在主App中的文件进行排序,排序的规则是按照最近的修改时间升序排序。
抛出异常Comparison method violates its general contract
分析问题
说到Collections.sort()和java.lang.IllegalArgumentException:Comparison method violates its general contract!这个崩溃,相信大家都已经百度过大概因为什么原因了。没错,Collections.sort()在JDK6和JDK7中实现的底层排序算法变了,在JDK6中使用的时MergeSort排序,而在JDK7中使用的是TimSort。里面具体的算法自行百度吧,我是实在没看懂里面咋实现的。
解决方法
1.使用SDK内部实现的compareTo方法
方法.2 判断完全不要少了等于这一块
总结
java.lang.IllegalArgumentException:Comparison method violates its general contract!这个异常确实很坑,在使用Collections.sort排序时,很容易抛异常,所以只能在写里面排序逻辑的时候,小心小心再小心,如果可能的话, 最好使用SDK内部实现的compareTo方法,这样会少很多坑。