2017-03-29 126 views
-6
Collections.sort(intervals, new Comparator<Interval>(){ 
    @Override 
    public int compare(Interval obj0, Interval obj1) { 
     return obj0.start - obj1.start; 
    } 
}); 

爲什麼重寫此比較函數可以使Collections.sort方法起作用? 謝謝。替代集合排序

+0

比較器是一個接口,所以sort函數實現了這個接口? – PepperGo

+0

public static void更多... sort(List list,Comparator c) – PepperGo

+0

如果你問你爲什麼需要提供一個Comparator,那麼這是因爲Interval沒有*自然順序*,或因爲您想按不同的順序排序。閱讀['Comparable']的javadoc(https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html)以瞭解* natural ordering *的描述。換言之,這是因爲['sort()']的版本(https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List - )不需要「比較器」,要求該類具有自然順序,即實現「可比較」。 – Andreas

回答

0

爲什麼重寫這個比較函數可以使Collections.sort()方法 有效嗎?

Collections.sort(list)僅適用於執行Comparable的類,例如,類,如IntegerString

現在,假設你有class Apple,如下圖所示:

public class Apple { 

    private int weight; 

    private String name; 

    private String countryOfOrigin; 

    //getters and setters 

} 

那麼,現在假設你要比較Apple類型的對象,但怎麼做Collections.sort()知道你想通過weightname或其他東西進行比較。那麼,你可以定義Comparator(或Comparable)對象來告訴我要按重量或名稱進行比較等。

+1

_works僅適用於整數,字符串等..基本類類型_ - 這是不正確的。重要的是一個類是否實現「Comparable」。 – Marvin

+0

我同意你的意見,我簡化了一下,對於OP瞭解 – developer

+1

任何怎麼樣,我都加了點更清晰 – developer