您的位置:首页 > 其它

Exception:Comparison method violates its general contract!

2016-12-21 17:52 609 查看
在项目中,数据后台查询一些数据时偶然出现这个漏洞,错误信息如下:

严重: Servlet.service() for servlet [springMVC] in context with path [/ice] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Comparison method violates its general contract!] with root cause
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899)
at java.util.TimSort.mergeAt(TimSort.java:516)
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:1454)
at com.liyunet.service.functional.impl.IPDataMonitorServiceImpl.getIpDataByFetchedOrEnterpriseOrEvaluation(IPDataMonitorServiceImpl.java:160)


报错语句如下:

infoVO.sort((IPInfoCompletionVO v1, IPInfoCompletionVO v2) -> v1.getDegreeOfCompletion()<v2.getDegreeOfCompletion()?1:-1);


,经百度得知,使用比较器时,在做比较的两个变量相同时应该返回0,如果不返回0,则在一些特殊情况下会造成排序出错。具体解释,这里就不列举了,下面是引用文章的链接

关于TimSort排序的原理解释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐