2014-09-11 157 views
1

當我閱讀上述接口時,在閱讀了許多關於同一主題的網站之後,我對這些接口的語法並不十分清楚。可比較和比較器接口

考慮下面的代碼片斷:

public class ComparableTest implements Comparable,Comparator { 

    String name; 
    int age; 

    public ComparableTest(String name,int age){ 
     this.name=name; 
     this.age=age; 
    } 
    @Override 
    public int compareTo(Object o){    // line 1 
     ComparableTest c=(ComparableTest)o; 
     return name.compareTo(c.name);   // line 2 
    } 
@Override 
public int compare(Object o1, Object o2){  // line 4 
    ComparableTest c1=(ComparableTest)o1; 
    ComparableTest c2=(ComparableTest)o2; 
    return return c1.name.compareTo(c2.name); 
} 

    public static void main(String[] args) { 
     ComparableTest ct1=new ComparableTest("Max",23); 
     ComparableTest ct2=new ComparableTest("Alex",22); 
     ComparableTest ct3=new ComparableTest("Zen",25); 
     List lt=new ArrayList(); 
     lt.add(ct1); 
     lt.add(ct2); 
     lt.add(ct3); 
     Collections.sort(lt);         // line 3 
     Collections.sort(lt,new ComparableTest("jack",98)); // line 5 
    } 
} 

1)在第3行,Collections.sort(LT)與列表作爲參數調用其具有Object作爲參數接受列表LT的compareTo。怎麼樣 ?是不是compareTo必須有一個List作爲參數。我知道List也是Object的一種類型,但Object o將如何接受包含某個類的實例的List(請排除現在我不知道的泛型)

2)假設我調用c1.comapreTo c2)那麼很明顯c1是這個對象而c2是另一個用於比較的對象。所以隨後在comapreTo(對象O)以下行是清澈

public int compareTo(Object o) { 
    //cast the Object o 
    return c1.name.compareTo(c2.name); 
} 

但在第2行,我只寫name.compareTo(c.name)和比較。 名稱請參考這裏。 排序是如何發生的?我讀到它是當前對象,但我們將compareTo與Collections.sort調用而不是任何對象。

3)當第5行調用第4行時,第4行將列表lt設置爲o1,並將新創建的對象設置爲o2。我不明白要排序的對象在列表中,那麼爲什麼我們傳遞了一些不同的對象,並與它進行比較,因爲它不在列表中,也不會包含在我們的結果中。 如何在這裏進行排序?

4)我們可以通過第5行第二個參數的不同值?

如果使每個查詢都可以理解,會是可觀的。

+0

Plz可以讓任何人清楚我的懷疑。 – Nizam 2014-09-12 05:53:00

回答

0

第3行Collections.sort將一個列表作爲參數,compareTo(object o)由列表中的對象執行,並將其作爲參數作爲列表的其他對象。

在第2行中name是執行該方法的對象的屬性名稱。

當您調用collections.sort(lt)時,compareTo(Object o)用於執行orderig,並由列表中的多個對象執行,並將列表中的其他對象作爲參數執行,它取決於shorting algoritm .sort()使用。

例如在列表中l只有兩個調用collections.sort(l)的對象將使compareTo(Object o)被一個對象執行,另一個將另一個作爲參數執行,列表將按順序排列。更大的列表將需要更多的電話。

collections.sort()接受一個參數一個列表或一個列表和一個比較器。