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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田宇鹤 中级黑马   /  2012-11-24 23:03  /  1301 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public class TestSet {
        public static void main(String[] args) {
               
                TreeSet<Student> se = new  TreeSet<Student>();
               
                Student s1 = new Student("张三",90);
                Student s2 = new Student("王五",90);
                Student s3 = new Student("赵六",90);


                se.add(s1);
                se.add(s2);
                se.add(s3);


//                se.add("s");
//                se.add("a");
//                se.add("c");
                       
                Iterator<Student> it = se.iterator();
               
                while(it.hasNext()) {
                        Student s = it.next();
                        System.out.println(s.getName() + "-" + s.getAge());
                }
        }
}


TreeSet 打印 Student 类型的就会出现 类型转换异常,而String类型就没事 ,如果要想打印Student类型的应该怎么办啊?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
请先注意你的错误的全部信息

Exception in thread "main" java.lang.ClassCastException: test.Student cannot be cast to java.lang.Comparable
是类型转换异常不假,但是你得看清楚是从哪转换到哪。

因为你用的是Treeset,而不是一般的集合。Treeset是要对集合内的元素排序的。而你的Student类既没有既然实现Comparable接口,实现compareTo方法,
也没有搞出一个比较器。
我对你的student类稍加改造。
  1. class Student implements Comparable<Student>{//实现接口,并指定泛型
  2.         private String name;
  3.         public Student(String name, int age) {
  4.                 super();
  5.                 this.name = name;
  6.                 this.age = age;
  7.         }
  8.         private int age;
  9.         public String getName() {
  10.                 return name;
  11.         }
  12.         public void setName(String name) {
  13.                 this.name = name;
  14.         }
  15.         public int getAge() {
  16.                 return age;
  17.         }
  18.         public void setAge(int age) {
  19.                 this.age = age;
  20.         }
  21.         @Override
  22.         public int compareTo(Student stu) {
  23.                 // TODO Auto-generated method stub
  24.                
  25.                 //return Integer.valueOf(stu.getAge()).compareTo(Integer.valueOf(this.getAge()));//按年龄比较
  26.                 return stu.getName().compareTo(this.getName());//按姓名比较
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!嘿嘿

查看全部评分

回复 使用道具 举报
崔政 发表于 2012-11-24 23:19
请先注意你的错误的全部信息

Exception in thread "main" java.lang.ClassCastException: test.Student ca ...

嗯  了解了  谢谢哈
回复 使用道具 举报
关键是你自定义学生类了吗?如果只是目前的代码是不行的。
可以通过实现Comparator接口中的compare方法、对自定义学生类进行操作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马