在项目中,数据后台查询一些数据时偶然出现这个漏洞,错误信息如下:
严重: 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排序的原理解释