@FunctionalInterface
public interface Comparator {
int compare(T o1, T o2); // 必須實現
boolean equals(Object obj); // 默認方法(繼承自 Object)
// ... 其他默認/靜態方法
}
compare,Lambda/匿名類只需實現該方法。equals 繼承自 Object,默認比較引用地址。Comparator 契約要求:若 compare(o1,o2)==0 則 equals(o1,o2) 應為 true,但不強制覆寫,框架不依賴它進行排序。compare 判斷元素大小關係(<0, =0, >0),構建紅黑樹。TreeSet ts = new TreeSet<>(new Comparator() {
@Override
public int compare(R o1, R o2) {
return Integer.compare(o2.count, o1.count); // 降序
}
// equals 可不寫
});
| 接口 | 位置 | 用途 |
|---|---|---|
| Comparable | 元素類內部 | 自然順序(如 String、Integer 默認升序) |
| Comparator | 外部類/匿名類 | 定制順序、多種排序策略共存 |
TreeSet 構造器傳入 Comparator 時,只需實現 compare 方法;equals 方法用於外部比較兩個 Comparator 實例是否相等,不參與排序決策。