Android碰到 "Comparison method violates its general contract" 异常的解决方法

来源:互联网 发布:免费远程控制软件 编辑:程序博客网 时间:2024/06/05 15:04

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());方法进行排序,避免出现异常.



0 0
原创粉丝点击