Cannot be cast to java.lang.Comparable异常

来源:互联网 发布:linux sed命令 编辑:程序博客网 时间:2024/06/05 07:59

Set集合中的treeSet问题:cannot be cast to java.lang.Comparable;

原理:

Set不保存重复的元素,与Collection类似,只是行为不同,Set是基于对象的值来确定归属性的。对结果排序,一般采用TreeSet。


TreeSet是依靠TreeMap来实现的。
TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器,
我们可以在构造TreeSet对象时,传递实现Comparator接口的比较器对象。
- TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法
- Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)

- 如果想把自定义类的对象存入TreeSet进行排序 那么必须实现Comparable接口 在类上implement Comparable重写compareTo()方法*在方法内定义比较算法, 根据大小关系, 返回正数负数或零在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较*

==cannot be cast to java.lang.Comparable==,遇到这个异常错误,就是说treeMap(或者treeSet)并不知道该如何进行排序,解决这个异常有两种方法:
1. 在构造TreeMap时指定一个比较器,这个比较器用于比较两个值,并且返回一个整数值作为他们的比较结果。
2. 就是key实现Comparable接口。并重写compareTo()方法;根据大小关系, 返回正数负数或零

@Override    public int compareTo(Resources o) {        if (o.id == this.id) {            return 0;        } else if (this.id > o.id) {            return 1;        } else            return -1;    }
阅读全文
0 0
原创粉丝点击