两者都是用于比较数据的大小,实现Comparable 需要重写compareTo()方法;实现Comparator需要重写compare()方法。
Compareble接口使用示例:
如下代码所示,使用Compareble实现数据的比较需要在类中实现compareTo()方法。Java的很多类已经实现了Comparable接口,比如说String,Integer等类。
class Test {
public static void main(String[] args) throws InterruptedException {
Student student1 = new Student("张三",30);
Student student2 = new Student("李四",20);
Student student3 = new Student("王五",40);
List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
studentList.add(student3);
Collections.sort(studentList);
System.out.println(studentList);
}
}
class Student implements Comparable<Student>{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student other) {
return this.age-other.age;
}
@Override
public String toString() {
return name+":"+age;
}
}
输出:
[李四:20, 张三:30, 王五:40]
Process finished with exit code 0
Comparetor接口使用示例:
使用Comparetor则需要创建一个比较器对象,比较器类要实现Comparetor接口,如下所示:
class Test {
public static void main(String[] args) throws InterruptedException {
Student student1 = new Student("张三",30);
Student student2 = new Student("李四",20);
Student student3 = new Student("王五",40);
List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
studentList.add(student3);
Collections.sort(studentList, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
});
System.out.println(studentList);
}
}
class Student{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name+":"+age;
}
}
或者:
class Test {
public static void main(String[] args) throws InterruptedException {
Student student1 = new Student("张三",30);
Student student2 = new Student("李四",20);
Student student3 = new Student("王五",40);
List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
studentList.add(student3);
StudentComparator studentComparator = new StudentComparator();
Collections.sort(studentList, studentComparator);
System.out.println(studentList);
}
}
class StudentComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
}
class Student{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name+":"+age;
}
}
输出:
[李四:20, 张三:30, 王五:40]
Process finished with exit code 0