`Comparable` 介面的 `compareTo` 方法的升序或降序取決於實現該介面的類的具體實現。按照慣例,`compareTo` 方法應該返回負數、零或正數來指示當前對象是小於、等於還是大於傳入的對象。具體來說: - 如果 `this` 對象小於傳入的對象,則 `compareTo` 應該 ...
Comparable
介面的 compareTo
方法的升序或降序取決於實現該介面的類的具體實現。按照慣例,compareTo
方法應該返回負數、零或正數來指示當前對象是小於、等於還是大於傳入的對象。具體來說:
- 如果
this
對象小於傳入的對象,則compareTo
應該返回負數。 - 如果
this
對象等於傳入的對象,則compareTo
應該返回零。 - 如果
this
對象大於傳入的對象,則compareTo
應該返回正數。
通常情況下,這樣的實現會使 compareTo
方法按照升序排序。但是,你也可以通過在返回語句中反轉比較結果來實現降序排序。這完全取決於具體的實現。
單欄位排序
下麵是一個示例,演示了一個自定義類 Person
實現了 Comparable
介面,並使用 compareTo
方法按照年齡進行排序:
public class Person implements Comparable<Person> {
private String name;
private int age;
// 構造函數、getter 和 setter 方法省略
@Override
public int compareTo(Person other) {
// 按照年齡升序排序
return this.age - other.age;
}
}
在這個示例中,compareTo
方法返回的結果是根據年齡比較的,如果調用 person1.compareTo(person2)
,返回的結果將是負數、零或正數,分別表示 person1
的年齡小於、等於或大於 person2
的年齡。
多欄位排序
如果涉及到多個欄位,比如一個學生類,它有成績和年紀,先按成績的降序排序,當成績相同時,再按著年紀的升序排序,這就需要我們對兩個欄位進行判斷了,如下
@Override
public int compareTo(Student o) {
if (this.score > o.score)
return -1;
else if (this.score < o.score)
return 1;
else {
return this.age-o.age;
}
}
或者先判斷是否不相同,這樣兩層if也可以了
@Override
public int compareTo(Student o) {
if (this.score != o.score)
return (int) (o.score - this.score);
else
return this.age - o.age;
}
總之,Comparable
介面的 compareTo
方法的升序或降序取決於具體的實現,你可以根據需要來決定返回的結果。
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!