閒說: Java 中Comparable 和 Comparator 的區別

老婆大人很温柔發表於2024-06-18

共同點

  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的方式實現相同的目的;

相關文章