2015-09-27 86 views
0

我知道compareTo可以返回正的負值和零值。compareTo方法如何與array.sort一起對數組進行排序?

所以,如果我用

public class x implements Comparable <Object O> {/*...*/} 

,並指定內部

public int compareTo(int i) {  
    if (this.intg < i) { return -1; } 
    else if (this.intg > i) { return 1; } 
    else { return 0; } 
} 

請問我能以這種方式排序使用Array.sort(O[]objects)

我不知道array.sort()compareTo()連接。 它甚至不會調用比較方法對其進行排序。 那麼,是什麼在compareTo()輸入真的?我在哪裏可以通過它,如果我不能調用此方法,當我用array.sort()

回答

3

這裏是Arrays.sort(Object[])的Javadoc:指定對象按升序進行排列

排序,根據其元素的自然順序。數組中的所有元素都必須實現Comparable接口。此外,陣列中的所有元素必須相互可比(,即e1.compareTo(e2)不得爲陣列中的任何元素e1e2拋出ClassCastException)。

因此,排序方法依賴於數組元素的接口Comparable

+0

所以你的意思是,E1和E2必須是在同一個班? – ksdawq

+0

是的,或者是另一個的子類。 – blm

+0

@ksdawq不一定。只要元素實現「可比」。 – manouti

-1

您可以使用Collections.sort方法對您的對象進行排序List。第二個參數是您的Comparator實現。

例子:

List<Animal> animals = .. some ArrayList for example; 
Comparator<Animal> comparator = new Comparator<Animal>() { 
    public int compare(Animal d1, Animal d2) { 
     int v1 = d1.intg; 
     int v2 = d2.intg; 

     return (v1 > v2 ? 1 : (v1 == v2 ? 0 : -1)); 
    } 
}; 

Collections.sort(animals, comparator); 

// the 'animals' collection is now sorted based on the `intg` property 
+0

但我只允許使用可比的界面。你可以在可比的界面中解釋嗎?謝謝 – ksdawq

+0

Comparable的javadocs非常好,你能解釋一下你不明白的東西嗎? – blm

+0

@blm我不明白我怎麼能在compareTo()中傳遞參數,當它從來沒有要求我調用compareTo時,我使用Array.sort – ksdawq

-1

一般來說,你會更好,創造一個比較,而不是實現媲美。然後,您可以傳遞到集合排序方法:

Collections.sort(myArrayList, new Comparator<MyObject>(){ 
    public int compare(MyObject o1, MyObject o2){ 
     return Integer.compare(o1.value == o2.value); 
    } 
}); 

編輯:

閱讀一些有機磷農藥的意見後,我們可以證明compareTo方法的確是被稱爲:

public class TestClass implements Comparable<TestClass> { 
    private int value; 

    public int getValue(){ 
     return this.value; 
    } 

    public void setValue(int v){ 
     this.value = v; 
    } 

    @Override 
    public int compareTo(TestClass arg) { 
     System.out.println("In compareTo"); 
     return Integer.compare(this.value, arg.value); 
    } 
} 

然後如果我們做到以下幾點:

ArrayList<TestClass> a = new ArrayList<>(); 
    for(int i = 0; i < 10; i++){ 
     TestClass t = new TestClass(); 
     t.setValue(i); 
     a.add(t); 
    } 

    System.out.println("Before sort."); 
    Collections.sort(a); 

我們將看到的compareTo甲基OD正在從排序方法中調用,因爲終端將展示我們的跟蹤語句:

Before sort. 
In compareTo 
In compareTo 
In compareTo 
In compareTo 
In compareTo 
In compareTo 
In compareTo 
In compareTo 
In compareTo 
+0

你能解釋一下:「你最好創建一個比較器而不是實現Comparable」。 – blm

+0

它的哪一部分? – jste89