Cannot be cast to java.lang.Comparable异常

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)并不知道该如何进行排序,解决这个异常有两种方法:

    在构造TreeMap时指定一个比较器,这个比较器用于比较两个值,并且返回一个整数值作为他们的比较结果。就是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;    }

不论你在什么时候结束,重要的是结束之后就不要悔恨

Cannot be cast to java.lang.Comparable异常

相关文章:

你感兴趣的文章:

标签云: