闲说: Java 中Comparable 和 Comparator 的区别
共同点
- Comparable 和 Comparator 他们都可以实现集合的排序功能;
区别
- Comparable 被实现类实现后, 需要重写compareTo方法, 方可使用Collections/Arrays工具类提供的排序方法进行排序;
- Comparator 被实现类实现后, 也可以重写compare方法, 这个方法虽然能返回两个对象的大小关系,但是没有和其他排序工具进行关联;
- Comparator 提供使用匿名内部类的实现方式实例化一个比较器对象, 作用是支持集合对象的实例方法sort(),从而达到对集合的排序目的;
代码如下:
public class Test {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("tom", 23));
students.add(new Student("jerry", 55));
students.add(new Student("jack", 80));
students.add(new Student("jane", 45));
students.sort((s1, s2) -> s1.getAge() - s2.getAge());
System.out.println(students);
}
}
其中,Student类并未实现Comparable接口, 所以无法使用Collections/Array的sort方法进行集合排序 --- 这点很重要. 所以只能用实现一个比较器对象的方式进行排序了.
所以从这一点可以看出, Comparable主要是对于设计类时使用, 当我们无法对类进行修改时, 我们可以使用Comparator的方式实现相同的目的;