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