在排序的代码中突然报出:Comparison method violates its general contract!异常,经过网上查找发现原因如下:
简单来说可以这么理解:
在JDK7以后,实现Comparable接口后,要满足一下三个特性:
1. 自反性:x,y 的比较结果和 y,x 的比较结果相反。
2. 传递性:x>y,y>z,则 x>z。
3. 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。
而我的代码如下:
xyList.sort((left, right) ->
{
if (x > y)
return -1;
if (x < y)
return 1;
// 当相等的时候随机返回一个
if ((int) (Math.random() * 2) == 1)
return 1;
return -1;
});
由于当相等的时候总会返回随机的结果,而不是一个确定的结果,不满足排序的对称性,就报出以上错误
参考博文:https://www.jb51.net/article/116530.htm(深入)
参考博文:https://www.cnblogs.com/wendelhuang/p/7356797.html