黑马程序员技术交流社区

标题: 关于自定义比较器的问题! [打印本页]

作者: 邓飞飞    时间: 2012-5-6 19:10
标题: 关于自定义比较器的问题!
importjava.util.*;
class  StudentAndSetDeno
{
       public static void main(String[] args)
       {
              Collection<Student> students= new TreeSet<Student>(new MyComparator());
              students.add(newStudent("dengfeifei1",23,85));
              students.add(newStudent("dengfeifei2",23,86));
              students.add(newStudent("dengfeifei3",23,87));
              students.add(newStudent("dengfeifei4",23,88));
              students.add(newStudent("dengfeifei5",23,89));
              Iterator<Student> it =students.iterator();
              while(it.hasNext())
              {
                     Student stu = it.next();
                     System.out.println(stu.getName()+","+stu.getAge()+","+stu.getGrade());
              }
       }
}
classMyComparator implements Comparator<Student>
{
       public int compare(Student stu1,Studentstu2)
       {
      //从大到小排序只需将比较的对象调过来就可以了
              int num = newInteger(stu2.getGrade()).compareTo(new Integer(stu1.getGrade()));
              return num;
       }
}
classStudent //用TreeSet集合存储自定以对象,我给集合自定义比较器了,那么这个自定义的类还需要实现Comparable接口和覆盖compareTo方法吗???
{
       private String name;
       private int age;
       private int grade;
       public Student(String name,int age,intgrade)
       {
              this.name = name;
              this.age = age;
              this.grade = grade;
       }
       public void setName(String name)
       {
              this.name = name;
       }
       public String getName()
       {
              return name;
       }
       public void setAge(int age)
       {
              this.age = age;
       }
       public int getAge()
       {
              return age;
       }
       public void setGrade(int grade)
       {
              this.grade = grade;
       }
       public int getGrade()
       {
              return grade;
       }
}

作者: 倪杭乘    时间: 2012-5-6 19:21
不需要了 ,只要实现一种方式就可以
1,自定义比较器
2,类实现Comparable接口,复写compareTo方法
作者: 谭景宾    时间: 2012-5-6 19:37
自定义了个比较器,就不需要实现实现Comparable接口了。
就算你实现了,你传入的是自定义比较器,比较方式也是按照自定义的比较器规则比较的。
作者: 何阳    时间: 2012-5-6 19:43
TreeSet对元素进行排序的方式一:
                   让元素自身具备比较功能,元素就需要实现Comparable接口。覆盖compareTo
方法。如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
                可以使用TreeSet集合第二种排序方式二:
                    让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方
法。将该类对象作为参数传递给TreeSet集合的构造函数。
二者用其一即可......




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