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;
}
}