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
支付寶掃一掃,為大叔打賞!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555549.html
標籤:其他
下一篇:返回列表