Comparable與Comparator的區別

Comparable介紹   

    實現了Comparable接口的類,能夠進行排序比較。該排序的實現,是由程序員自定義排序規則,實現compareTo方法。compareTo方法返回int類型的整數,一下分爲3種情況:

  1.     比較者(當前對象)比被比較者大,則返回一個正數。
  2.     比較者與被比較者相等,返回0。
  3.     比較者比被比較者小,返回一個負數。

    其代碼實現如下

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的方法可以稱爲外比較,因此需要在適合場合選擇合適的方法。

    






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章