java~搞懂Comparable接口的compareTo方法
Comparable 接口的 compareTo 方法的升序或降序取決于實現該接口的類的具體實現。按照慣例,compareTo 方法應該(gai)返回負數、零或正數來指示(shi)當前對(dui)(dui)象是小于(yu)、等于(yu)還是大于(yu)傳入的對(dui)(dui)象。具體(ti)來說(shuo):
- 如果
this對象小于傳入的對象,則compareTo應該返回負數。 - 如果
this對象等于傳入的對象,則compareTo應該返回零。 - 如果
this對象大于傳入的對象,則compareTo應該返回正數。
通常情況下,這樣的實現會使 compareTo 方(fang)法按照升序排序。但(dan)是(shi),你(ni)也可以通過在返回語句中反轉比較結果(guo)來(lai)實(shi)現(xian)降序排序。這完全取決(jue)于具體的實(shi)現(xian)。
單字段排序
下面是一個示例,演示了一個自定義類 Person 實現了 Comparable 接口,并使用 compareTo 方法按照(zhao)年齡進行(xing)排序:
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 的年齡。
多字段排序
如果涉(she)及到多個(ge)字段(duan),比如一個(ge)學(xue)生類,它有成績和年(nian)紀,先按成績的降序(xu)排序(xu),當成績相同時,再(zai)按著年(nian)紀的升序(xu)排序(xu),這就(jiu)需要(yao)我(wo)們對(dui)兩(liang)個(ge)字段(duan)進(jin)行判斷(duan)了,如下
@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;
}
}
或(huo)者(zhe)先判斷是否(fou)不相同,這樣(yang)兩層if也(ye)可(ke)以了
@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 方法的升序或降(jiang)序取決(jue)于具體的實現,你可(ke)以根據需要(yao)來決(jue)定返回的結(jie)果。