Java中Comparator接口与Comparable接口的区别
作者:网络转载 发布时间:[ 2014/4/16 9:14:03 ] 推荐标签:Java 接口
4.总结
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接成为一个可以比较的对象,但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样可以节省很多重复劳动了。
/----------------------------------------------分割线------------------------------------------------/
java实现Comparable接口问题?
补充:之前搜这个两个接口的区别时,看到别人提的一个问题,这个问题是:
题目要求:
自定义一个Student类实现Comparable接口(该接口用于指定排序规则),Student类包含学号和姓名属性,使用TreeSet添加一组Student类的对象,然后循环输出学生信息!所学及所得,根据这个问题,我写了程序实现了下,作为对刚学到的知识点的实践,以下是源代码:
/* 程序来源:百度知道中一个问题
* 源文件名称:TestComparable.java
* 要 点:
* 自定义一个Studnet类实现Comparable接口。
* Student类包含学号和姓名属性。
* 使用TreeSet添加对象,循环输出学生信息
*/
import java.util.*;
public class TestComparable{
public static void main(String[] args){
Student s1 = new Student("小明",1);
Student s2 = new Student("张三",2);
Student s3 = new Student("李四",3);
Student s4 = new Student("王五",4);
Student s5 = new Student("王五",5);
Set<Student> set = new TreeSet<Student>();
set.add(s5);
set.add(s3);
set.add(s2);
set.add(s4);
set.add(s1);
Iterator<Student> it = set.iterator();
System.out.println("学号 "+"学生姓名");
while(it.hasNext()){
Student s = it.next();
System.out.println(s.getId()+" "+s.getName());
}
}
}
//这里不能声明为class Student implements Comparable,否则会报错
class Student implements Comparable<Student>{
private int id;
private String name;
public Student(String name,int id){
this.name = name;
this.id = id;
}
public int compareTo(Student stu){//先比较学号,学号相等再比较姓名
if(this.getId() == stu.getId() ){
return this.getName().compareTo(stu.getName());
}else
return this.getId() - stu.getId();
}
public String getName(){
return name;
}
public int getId(){
return id;
}
}

sales@spasvo.com