Comparable:内部比较器,进行排序的元素必须要实现该接口并重写里面的compareTo方法
Comparator:外部比较器,可以使用一个新类(匿名内部类、比较器实现类)来实现该接口,指定传入的泛型,并重写里面的compare方法就可以实现排序
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Person{
private int age;
private String name;
}
import java.util.*;
public class Demo {
public static void main(String[] args){
List<Person> list=new ArrayList<>();
list.add(new Person(18,"Java"));
list.add(new Person(20,"MySQL"));
list.add(new Person(6,"Redis"));
list.sort(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.getAge()-o1.getAge();
}
});
list.forEach(p->System.out.println(p));
}
}
执行上述代码,其输出结果为:
Person(age=20, name=MySQL)
Person(age=18, name=Java)
Person(age=6, name=Redis)
Comparable与Comparator都是用来实现元素排序的,它们二者的区别如下:
1.Comparable是比较的意思,而Comparator是“比较器”的意思
2.Comparable是通过重写compareTo方法实现排序的,而Comparator是通过重写compare方法实现排序的
3.Comparable必须由自定义类内部实现排序方法,而Comparator是外部定义并行排序的
Comparable可以看作是“对内”进行排序接口,Comparator是“对外”进行排序的接口