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)并不知道该如何进行排序,解决这个异常有两种方法:
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;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值