闲说: Java 中Comparable 和 Comparator 的区别

共同点

  1. Comparable 和 Comparator 他们都可以实现集合的排序功能;

区别

  1. Comparable 被实现类实现后, 需要重写compareTo方法, 方可使用Collections/Arrays工具类提供的排序方法进行排序;
  2. Comparator 被实现类实现后, 也可以重写compare方法, 这个方法虽然能返回两个对象的大小关系,但是没有和其他排序工具进行关联;
  3. 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的方式实现相同的目的;

posted @ 2024-06-18 18:34  老婆大人很温柔  阅读(5)  评论(0编辑  收藏  举报