今天一同事采用Collections.sort 來對文件進行排序,出現 Comparison method violates its general contract 異常, 找了好久,才發現是實現接口Comparator 的類有問題, 在compare中沒有處理好兩個比較的對象相等的情況 ...
異常信息 原因 JDK 中的Collections.Sort方法實現中,如果兩個值是相等的,那么compare方法需要返回 ,否則可能會在排序時拋錯,而JDK 是沒有這個限制的。 在 JDK 版本以上,Comparator 要滿足自反性,傳遞性,對稱性,不然 Arrays.sort, Collections.sort 會報 IllegalArgumentException 異常。 說明: 自反性 ...
2016-06-30 17:51 0 19683 推薦指數:
今天一同事采用Collections.sort 來對文件進行排序,出現 Comparison method violates its general contract 異常, 找了好久,才發現是實現接口Comparator 的類有問題, 在compare中沒有處理好兩個比較的對象相等的情況 ...
這個錯誤就是寫比較器的時候少寫了返回值的情況: 比如: 一定不要把返回0這行代碼忽悠掉: ...
violates its general contract! at java.util.TimSort ...
廢話少說,直接上報錯信息(如下圖) 最近公司app上有個列表時而報錯,時而不報,復現問題不是很容易,翻看了下日志才知道是排序的地方有問題,這還是我第一次遇到,具體定位:Collections.sort(xxx), 於是再看對應的compareTo方法 ...
java.lang.IllegalArgumentException: Comparison method violates its general contract! 莫名其妙的出現一個錯誤,源代碼如下: 這是Android中對聯系人界面的排序規則 ...
因為業務需要,自己的model實現了Comparable接口,在Service層使用Collections.sort()方法對model對象的list進行排序。 但是在運行的時候,卻報下面的異常。 經過搜索得知,在JDK7以后,實現Comparable接口后,要滿足一下三個特性 ...
對一個集合里的對象按照某屬性排序時,遇到問題: java.lang.IllegalArgumentException: Comparison method violates its general contract! 后面查了資料后發現,jdk1.6和jdk1.7的排序算法有所更改 ...
最近在做產品需求的時候上線了一個新的產品需求,給用戶多了一種新的排序排序規則,更加方便用戶找到自己想要的東西。新版本發布后,QA 給我發了一個 線上崩潰 bug 鏈接,具體內容如下: 看到上面的鏈接,我有點懵逼了,就這排序還能給我搞出 bug 來?看到拋出的異常信息,也沒有見過,於是直接 ...