Comparable介紹
實現了Comparable接口的類,能夠進行排序比較。該排序的實現,是由程序員自定義排序規則,實現compareTo方法。compareTo方法返回int類型的整數,一下分爲3種情況:
- 比較者(當前對象)比被比較者大,則返回一個正數。
- 比較者與被比較者相等,返回0。
- 比較者比被比較者小,返回一個負數。
其代碼實現如下
public class Domain implements Comparable<Domain>
{
private String str;
public Domain(String str)
{
this.str = str;
}
public int compareTo(Domain domain)
{
if (this.str.compareTo(domain.str) > 0)
return 1;
else if (this.str.compareTo(domain.str) == 0)
return 0;
else
return -1;
}
public String getStr()
{
return str;
}
}
Comparator介紹
Comparator也是一個比較接口,如果某個類需要排序,而類本身又不支持排序(沒有實現Comparable接口),這種情況下,我們就可以實現compare方法,來實現排序,compare方法有兩個參數,分別爲要比較的兩個對象,返回類型也是int類型,有一下三種情況:
1.如果o1>o2,則返回正數。
2.如果o1=o2,則返回0。
3.如果o1<o2,則返回負數。
代碼實現如下,
public class DomainComparator implements Comparator<Domain>
{
public int compare(Domain domain1, Domain domain2)
{
if (domain1.getStr().compareTo(domain2.getStr()) > 0)
return 1;
else if (domain1.getStr().compareTo(domain2.getStr()) == 0)
return 0;
else
return -1;
}
}
二者的區別
從上面不難看出,實現Comparable接口排序要比實現Comparator接口排序耦合度要高,因爲如果要更改comparTo方法,就會變動實現類,而對於Comparator來說,只需要更改比較器類。實現compareTo方法的比較可以稱爲內比較,實現了compare的方法可以稱爲外比較,因此需要在適合場合選擇合適的方法。