黑马程序员技术交流社区
标题: 关于自定义比较器的问题! [打印本页]
作者: 邓飞飞 时间: 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 |