當我閱讀上述接口時,在閱讀了許多關於同一主題的網站之後,我對這些接口的語法並不十分清楚。可比較和比較器接口
考慮下面的代碼片斷:
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行第二個參數的不同值?
如果使每個查詢都可以理解,會是可觀的。
Plz可以讓任何人清楚我的懷疑。 – Nizam 2014-09-12 05:53:00