文章目录
- 一、Comparable接口
- 二、Comparator接口
一、Comparable接口
当我们要比较两个类的大小时,我们该如何比较呢,是这样吗?
这样写是错误的,所以我们需要用到接口Comparable的CompareTo方法。
而ComparaTo是抽象方法,所以我们可以根据我们的需求进行重写。
class Student implements Comparable<Student>{ //<Student>是泛型内容先不用管谁实现这个接口就写谁
public String name;
public int age;
public double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
//通过年龄进行比较
@Override
public int compareTo(Student o) {
return this.age - o.age; //this谁调用该方法就是谁,o是传入的对象。
}
}
public class Test1 {
public static void main(String[] args) {
Student student1 = new Student("张三",19, 86);
Student student2 = new Student("李四",23, 84);
if(student1.compareTo(student2) > 0) {
System.out.println("student1 > student2");
}else if(student1.compareTo(student2) == 0) {
System.out.println("student1 = student2");
}else {
System.out.println("student1 < student2");
}
}
}
李四年龄大于张三返回一个负数
当然也可以通过名字进行比较:
因为字符串是String类型,而 String 已经实现了Comparable接口的 compareTo() 方法.
当然也可以根据成绩进行比较:
但是当我们这么些时就会有写的很死,如你重写了compareTo()方法,用年龄进行比较,以后的都需要用年龄比较,所以我们了解另一个接口Comparator。
二、Comparator接口
在使用Comparator接口时,我们主要用到 compare() 方法进行比较,所以重写 compare() 抽象方法。
import java.util.Comparator;
class Student {
public String name;
public int age;
public double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
}
//年龄比较器
class AgeComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.age - o2.age;
}
}
//名字比较器
class NameComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
}
//成绩比较器
class ScoreComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return (int)(o1.score - o2.score);
}
}
public class Test1 {
public static void main(String[] args) {
Student student1 = new Student("张三",19, 86);
Student student2 = new Student("李四",23, 84);
//成绩比较
ScoreComparator score = new ScoreComparator();
System.out.println(score.compare(student1,student2));
//年龄比较
AgeComparator age = new AgeComparator();
System.out.println(age.compare(student1,student2));
//名字比较
NameComparator name = new NameComparator();
System.out.println(name.compare(student1,student2));
}
}
这样我们就可以根据我们的需求调用不同的比较器了。
注意:在使用Compartor接口时需要我们导入 import java.util.Comparator
下的Comparator接口。
好的,到这里本章节就结束了,如发现有错误,请各位大佬及时指出。