Android碰到 "Comparison method violates its general contract" 異常的解決方法
阿新 • • 發佈:2019-01-05
1.概述:
最近在對資訊進行排序時,做了一個簡單地比較器,當時在執行時並沒有報錯,但是,後臺資料重新整理時,我這邊就出了問題。在jdk1.6中,當我們比較的內容的值相同時,使用java自己的排序方法"Collections.sort()"是很正常的,可是到了jdk1.7,問題就會出現了,這種情就不再允許了,這是因為JDK7底層的排序演算法換了,JDK7中的Collections.Sort方法實現中要求,如果兩個值是相等的,那麼compare方法需要返回0,否則 可能 會在排序時拋錯(這個異常並不是頻繁出現的),而JDK6是沒有這個限制的。所以在比較時,我們必須要考慮兩個值相等的情況,而且返回的值需要為 0.
2.解決方法
如下程式碼,程式碼中8~9行增加了一句判斷兩個物件的值是否相同的語句,注意第9行,要求返回0(因為是判斷值是否相同,相同的話要求返回0,且必須是0),否則可能會報出異常.
public class PinyinComparator implements Comparator<DeptAddBookBean> {
1.public int compare(DeptAddBookBean o1,
DeptAddBookBean o2) {
2. if (o1.getLetter().equals("@") || o2.getLetter().equals("#")) {
3. return -1;
4. } else if
(o1.getLetter().equals("#") || o2.getLetter().equals("@")) {
5. return 1;
6. } else if
(o1.getLetter().compareTo(o2.getLetter())>0) {
7. return 1;
8. }else if(o1.getLetter().compareTo(o2.getLetter())==0){
9. return 0;//此處需要返回0;
10. }else {
11. return -1;
12. }
13 . }
}
如上新增一句判斷兩個值相等的情況後,在呼叫Collections.sort(list,new PinyinComparator());方法進行排序,避免出現異常.