A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吖钦 初级黑马   /  2014-12-8 13:53  /  1824 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序如下:
import java.util.*;
public class Lianxi09
{
        public static void main(String[] args)

        {
         TreeSet<Student10> ts = new TreeSet<Student10>();
         ts.add(new Student10("abc03"));
        }
}
class Person10
{
        private String name;
        Person10(String name)
        {
                this.name= name;       
        }
        public String getName()
        {
                return name;
        }
        public String toString()
        {
                return "Person:"+name;
        }
}
class Student10  extends Person10
{
        Student10 (String name)
        {
                 super(name);
        }
}
编译时出现
Exception in thread "main" java.lang.ClassCastException: 第十五天.Student10 cannot be cast to java.lang.Comparable
        at java.util.TreeMap.compare(Unknown Source)
        at java.util.TreeMap.put(Unknown Source)
        at java.util.TreeSet.add(Unknown Source)
        at 第十五天.Lianxi09.main(Lianxi09.java:9)
提问:该如何解决?

5 个回复

倒序浏览
请在class Person10后面加implements Comparable,TreeSet里存放的类必须继承Comparable接口。
回复 使用道具 举报
TreeSet集合是强制性排序的,TreeSet集合对元素强制性排序,有排序就必须比较,比较的方式有两种:
第一种方式:元素自身具备比较性,具体做法是元素所属的类实现Comparable接口,复写接口中的comparaTo()方法,自定义比较条件。如果元素自身不具备比较性,或者排序规则不是所需,就可以采用第二种方式:自定义比较器类实现Comparator接口,复写其compare()方法,自定义比较条件,将自定义比较器对象作为TreeSet集合构造函数的实际参数传递,让TreeSet集合自身具备比较性,可以对元素按比较器定义的规则进行排序。优先考虑第二种方式。
回复 使用道具 举报
按理说,添加1个元素是不会有错的。但是最好给存入的对象覆盖其自然排序的方法,不然会报你这样的异常的
回复 使用道具 举报
TreeSet中需要 实现能自然排序 或者用比较器排序  可以将要存的类实现Runnable 接口 实现compareTo方法
回复 使用道具 举报
有陷阱快跑丶 发表于 2014-12-8 19:18
TreeSet中需要 实现能自然排序 或者用比较器排序  可以将要存的类实现Runnable 接口 实现compareTo方法  ...

打错 不好意思 是Comparable:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马