遇到了一个很有意思的问题
报错 comparison method violates its general contract
这是什么原因?
因为我判空时,只分别判了o1==null和o2==null。违反了timesort的对称性原则,导致,如果o1和o2都为null的时候,会出现两种返回结果即:o1<o2=1,o1<o2=-1。所以就报了违反对比规则的异常。
所以我在判null的地方加上了if(o1==null && o2==null)return 0;
这个加也是需要注意的,那就是需要加在分别判o1==null和o2==null的前面。