Comparable和Comparator的用法和区别
Comparable
java中在用TreeSet集合存储一些基本数据类型或者String时都会有自动的排序规则,但是在当我们存储自定义对象的时候就会出现问题会报出格式转换异常的错误。所以要把当前类作为Comparable的接口 重写里面的compareTo方法才能让自定义对象能相互比较大小,才能用于TreeSet集合的存储,代码如下:
public class Student implements Comparable<Student>{
private String name;//姓名
private int age;
private double achievement;
@Override
public int compareTo(Student student) {
if (this.achievement > student.achievement) return -1;
else if (this.achievement < student.achievement) return 1;
else {
if (this.age < student.age) return -1;
else return 1;
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", achievement=" + achievement +
'}';
}
public Student(String name, int age, double achievement) {
this.name = name;
this.age = age;
this.achievement = achievement;
}
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 double getAchievement() {
return achievement;
}
public void setAchievement(double achievement) {
this.achievement = achievement;
}
}
Comparator
而Comparator却有着更为简便的用法,在定义集合的时候就直接定义出比较规则,代码如下:
Set<Student> set = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {//定义比较规则
return 0;
}
});