黑马程序员技术交流社区

标题: 【急】为什么我在TreeSet中加入一个自定义的对象元素,都... [打印本页]

作者: wkz_crystal    时间: 2015-3-17 12:34
标题: 【急】为什么我在TreeSet中加入一个自定义的对象元素,都...
本帖最后由 wkz_crystal 于 2015-3-17 12:37 编辑

只添加一个对象的实例进去哈:为什么都会报错,怎么会这样的呀……
  1. import java.util.*;
  2. //学生类
  3. class Student
  4. {
  5.         private String name;
  6.         private int age;

  7.         Student(String name,int age)
  8.         {
  9.                 this.name=name;
  10.                 this.age=age;
  11.         }

  12.         public String getName()
  13.         {
  14.                 return name;
  15.         }

  16.         public int getAge()
  17.         {
  18.                 return age;
  19.         }

  20. }

  21. class  TreeSetAddObject
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.                 TreeSet ts=new TreeSet();
  26.                 ts.add(new Student("wangming",28));
  27.                 /*ts.add("bcd");
  28.                 ts.add("accd");
  29.                 ts.add("bdd");
  30.                 ts.add("bdd");
  31.                 ts.add("Acd");*/
  32.                 //这样执行都不能通过:直接抛出异常了……晕倒!
  33.                 //java.lang.ClassCastException: Student cannot be cast
  34.         }

  35.         public static void sop(Object obj)
  36.         {
  37.                 System.out.println(obj);
  38.         }
  39. }
复制代码

作者: 木森森    时间: 2015-3-17 17:35
你要保证数据唯一性:实现comparable接口覆盖compareTo方法
作者: wkz_crystal    时间: 2015-3-18 18:28
还是没有弄明白,按理说:只加“一个实例化的对象进去”应该没有任何问题呀……不解呀……
作者: 班凤飞    时间: 2015-3-20 21:10
TreeSet集合里面元素要保证顺序啊,两种排序方式至少得有一种
作者: wkz_crystal    时间: 2015-3-20 21:40
班凤飞 发表于 2015-3-20 21:10
TreeSet集合里面元素要保证顺序啊,两种排序方式至少得有一种

保证顺序?什么意思,能具体点吗?
作者: ankje    时间: 2015-3-20 22:34
1.如果直接add("字符串")就可以,为什么?你看看人家String类都实现了Comparable接口了,你就照着做吧,不然的话TreeSet不知到对象的大小都不知把对象放哪好,当然会报错!
2.Student类的声明改为 class Student implements Comparable<Student>
3.Student类中覆写compareTo方法
  
  1. public int compareTo(Student o) {
  2.                         int temp = this.name.compareTo(o.name);
  3.                         return temp!=0?temp:this.age-o.age;
  4.                 }
复制代码

4.欧了。
作者: wkz_crystal    时间: 2015-3-21 18:44
ankje 发表于 2015-3-20 22:34
1.如果直接add("字符串")就可以,为什么?你看看人家String类都实现了Comparable接口了,你就照着做吧,不 ...

哦,原来是这样呀,我太大意了,谢谢您!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2