java~搞懂Comparable接口的compareTo方法
Comparable 接口的 compareTo 方法的升序或降序取決于實(shí)現(xiàn)該接口的類的具體實(shí)現(xiàn)。按照慣例,compareTo 方法應(yīng)該返回負(fù)數(shù)、零或正數(shù)來指示當(dāng)前對(duì)象是小于、等于還是大于傳入的對(duì)象。具體來說:
- 如果
this對(duì)象小于傳入的對(duì)象,則compareTo應(yīng)該返回負(fù)數(shù)。 - 如果
this對(duì)象等于傳入的對(duì)象,則compareTo應(yīng)該返回零。 - 如果
this對(duì)象大于傳入的對(duì)象,則compareTo應(yīng)該返回正數(shù)。
通常情況下,這樣的實(shí)現(xiàn)會(huì)使 compareTo 方法按照升序排序。但是,你也可以通過在返回語句中反轉(zhuǎn)比較結(jié)果來實(shí)現(xiàn)降序排序。這完全取決于具體的實(shí)現(xiàn)。
單字段排序
下面是一個(gè)示例,演示了一個(gè)自定義類 Person 實(shí)現(xiàn)了 Comparable 接口,并使用 compareTo 方法按照年齡進(jìn)行排序:
public class Person implements Comparable<Person> {
private String name;
private int age;
// 構(gòu)造函數(shù)、getter 和 setter 方法省略
@Override
public int compareTo(Person other) {
// 按照年齡升序排序
return this.age - other.age;
}
}
在這個(gè)示例中,compareTo 方法返回的結(jié)果是根據(jù)年齡比較的,如果調(diào)用 person1.compareTo(person2),返回的結(jié)果將是負(fù)數(shù)、零或正數(shù),分別表示 person1 的年齡小于、等于或大于 person2 的年齡。
多字段排序
如果涉及到多個(gè)字段,比如一個(gè)學(xué)生類,它有成績(jī)和年紀(jì),先按成績(jī)的降序排序,當(dāng)成績(jī)相同時(shí),再按著年紀(jì)的升序排序,這就需要我們對(duì)兩個(gè)字段進(jìn)行判斷了,如下
@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 方法的升序或降序取決于具體的實(shí)現(xiàn),你可以根據(jù)需要來決定返回的結(jié)果。
浙公網(wǎng)安備 33010602011771號(hào)