Comparison method violates its general contract!


  廢話少說,直接上報錯信息(如下圖)

  最近公司app上有個列表時而報錯,時而不報,復現問題不是很容易,翻看了下日志才知道是排序的地方有問題,這還是我第一次遇到,具體定位:Collections.sort(xxx),

於是再看對應的compareTo方法,如下

 

1     @Override
2     public int compareTo(xxx o) {
3         return this.getPublishTime().getTime() < o.getPublishTime().getTime() ? 1 : -1;
4     }

 

咋一看,這個倒序排列就是沒有對==的情況進行處理,而是將==算作-1處理了,Google了一下,發現是由於jdk7排序換了新的算法Timsort,這樣就會對排序的大小進行嚴格校驗,而jdk6是沒有對此進行校驗的

所以解決方法就簡單了,直接對==的情況加下處理即可。另外網上也提供了指定使用排序算法的解決方案(添加JVM參數:-Djava.util.Arrays.useLegacyMergeSort=true ),這個我沒有試驗

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM