1 、java.lang.Comparable(优先考虑它)(自然排序接口,自然比较接口)
3、java.util.Comparator(作为上面接口的补充,备胎)(定制排序接口,定制比较接口)
上面两个接口有点像孪生兄弟,经常一起出现,所以要注意区分。这两个接口的作用:当Java的对象要比较大小时,要排序时,就要实现他们两个接口之一。
例:我们要实现学生对象的排序或比较大小
(1)要让学生类Student实现java.lang.Comparable,并且重写int compareTo(Object obj)。
默认按照年龄比较大小
public class Student implements Comparable{
private String name;
private int age;
private int score;
private double weight;
public Student(String name, int age, int score,double weight) {
this.name = name;
this.age = age;
this.score = score;
this.weight = weight;
}
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;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + ''' +
", age=" + age +
", score=" + score +
", weight=" + weight +
'}';
}
@Override
public int compareTo(Object o) {
//假设默认是按照年龄比较大小
Student other = (Student) o;//向下转型,为了调用o对象中的age
return this.age - other.age;
}
}
(2)、可以为学生类的对象比较成绩但是声明一个类StudentScoreComparator,实现java.util.Comparator接口,重写接口的int compare(Object o1, Object o2)
public class StudentScoreComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
//比较两个学生对象的成绩
Student s1 = (Student) o1;
Student s2 = (Student) o2;
return s1.getScore() - s2.getScore();
}
}
(3)测试类
public class TestCompare {
public static void main(String[] args) {
Student s1 = new Student("张三",24,89, 75.5);
Student s2 = new Student("李四",24,85,62.0);
//比较s1和s2的大小,默认按照年龄比较大小的
System.out.println("按照年龄比较:");
if(s1.compareTo(s2)>0){
System.out.println("s1 > s2");
}else if(s1.compareTo(s2)<0){
System.out.println("s1 < s2");
}else{
System.out.println("s1 = s2");
}
System.out.println("按照成绩比较:");
//需要调用StudentScoreComparator类的非静态compare方法比较两个学生对象的成绩
StudentScoreComparator sc = new StudentScoreComparator();
if(sc.compare(s1,s2) > 0){
System.out.println("s1的成绩 高于 s2的成绩");
}else if(sc.compare(s1,s2) < 0){
System.out.println("s1的成绩 低于 s2的成绩");
}else{
System.out.println("s1的成绩 等于 s2的成绩");
}
}
}



