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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.*;
  2. /*
  3. TreeSet排序的第二种方式:
  4.                 当元素自身不具备比较性时,或者具备的比较性不是所需要的
  5.                 这时就需要让集合自身具备比较性
  6.                 在集合初始化时,就有了比较方式
  7.                 定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数
  8. */
  9. class TreeSetDemo2  
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 TreeSet ts = new TreeSet(new MyCompare());   //将比较器作为参数传递给集合
  14.                 ts.add(new Student("lisi02",22));        //添加
  15.                 ts.add(new Student("lisi03",20));
  16.                 ts.add(new Student("lisi09",19));
  17.                 ts.add(new Student("lisi01",17));
  18.                         Iterator it = ts.iterator();         //迭代器
  19.                         while(it.hasNext()){
  20.                                 Student s = (Student)it.next();  //强转
  21.                                 System.out.println(s.getName()+"---"+s.getAge());
  22.                         }
  23.         }
  24. }
  25. class Student implements Comparable //该接口强制让学生具备比较性
  26. {
  27.         private String name;
  28.         private int age;
  29.         Student(String name,int age){
  30.                 this.name = name;
  31.                 this.age = age;
  32.         }
  33.         public String getName(){
  34.                 return name;
  35.         }
  36.         public int getAge(){
  37.                 return age;
  38.         }
  39.         public int compareTo(Object obj){
  40.                 if(!(obj instanceof Student))
  41.                         throw new RuntimeException("不是学生对象");
  42.                         Student s = (Student)obj;
  43.                         if(this.age>s.age)
  44.                                 return 1;
  45.                         if(this.age==s.age)
  46.                         {
  47.                                 return this.name.compareTo(s.name);                       
  48.                         }
  49.                         else
  50.                                 return -1;

  51.         }
  52. }

  53. class MyCompare implements Comparator       //自定义比较器
  54. {
  55.         public int compare(Object o1,Object o2){
  56.         //        Object obj = new Object();
  57.         //        if(!(obj instanceof Student))
  58.         //                throw new RuntimeException("不是学生对象");
  59.                 Student s1 = (Student)o1;
  60.                 Student s2 = (Student)o1;
  61.                 return s1.getName().compareTo(s2.getName());
  62.         }
  63. }
复制代码
我是看着视频打的 但打印结果只打印了lisi02---22
后面的打印不出来
我在比较器里用if判断了下
Exception in thread "main" java.lang.RuntimeException: 不是学生对象
        at MyCompare.compare(TreeSetDemo2.java:60)
        at java.util.TreeMap.compare(TreeMap.java:1291)
        at java.util.TreeMap.put(TreeMap.java:538)
        at java.util.TreeSet.add(TreeSet.java:255)
        at TreeSetDemo2.main(TreeSetDemo2.java:14)

跟我说不是学生对象
哪位大神能帮忙解答下

1 个回复

倒序浏览
看到错误了。。。
Student s1 = (Student)o1;
Student s2 = (Student)o1;
同时都是Object o1 比较相同肯定都一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马