2009-11-07 165 views

回答

247

您可以使用此

sort(T[] a, Comparator<? super T> c) 

Arrays.sort(a, Collections.reverseOrder()); 
+76

它無法對基元數組排序 –

+11

將您的基元轉換爲它們各自的對象。 Integer爲int,double爲double,布爾型爲布爾值等。 – Ishmael

+10

如果您仍想使用自定義[comparator](http://docs.oracle.com/javase/7/docs/api/java/util/Comparator .html):'Collections.reverseOrder(this)' –

84

您可以使用此:

Arrays.sort(data, Collections.reverseOrder()); 

Collections.reverseOrder()使用返回Comparator逆自然順序。您可以使用Collections.reverseOrder(myComparator)獲得自己的比較器的反轉版本。

+6

OP想要對數組進行排序。 'Collections.sort()'把'List'作爲輸入參數,而不是數組。 –

+1

ops,我寫了Collections而不是Arrays.Its現在已經更正了。 – William

+2

+1解釋如何使用自己的比較器。 – dj18

74

爲列表

Collections.sort(list ,Collections.reverseOrder()); 

用於陣列

Arrays.sort(array, Collections.reverseOrder()); 
+12

int [] array = {2,4,3,6,8,7}; Arrays.sort(array,Collections.reverseOrder());給我一個錯誤! 錯誤的是:「類型數組中的方法sort(int [])不適用於參數(int [],比較器)」 –

+3

int不是對象。嘗試使用Integer []代替。 – Ornithopter

+0

爲什麼Integer []工作而不是int []? – OpMt

3

對於其中包含的原語元素,如果有org.apache.commons.lang(3)在處置容易的方式來扭轉陣列(排序之後)陣列是使用:

ArrayUtils.reverse(array); 
+1

爲什麼要按升序對它進行排序,然後使用外部庫恢復此順序,何時可以在一個步驟中完成? – Betlista

+0

而這一步呢? –

+0

請參閱上面的答案 - 使用'reverseOrder'比較器的'Arrays.sort()'... – Betlista

2

我不知道你的用例是什麼,但除了o這裏的答案另一個(懶惰)選項仍然按照您指示的升序排序,但是然後在反向順序中進行迭代。

31

另一種可能是(對數字!)

  1. -1
  2. 排序
  3. 乘再次與-1

字面上講乘以陣列:

array = -Arrays.sort(-array) 
+16

'{__________ lol ________}' –

+7

這種方法實際上是創造性的,如果我們排序數字,即使它不是通用的,並且可能導致溢出問題... – hackjutsu

+2

這對於原始類型。你是天才。 –

42

沒有明確的比較R:

Collections.sort(list, Collections.reverseOrder()); 

具有明確比較:

Collections.sort(list, Collections.reverseOrder(new Comparator())); 
4

的Java 8:

Arrays.sort(list, comparator.reversed()); 

更新: reversed()逆轉指定比較。通常,比較器按升序排列,所以這會改變順序以降序。

2

首先,您需要使用排序的數組:

 Collections.sort(Myarray); 

然後,你需要從上升到下降的使用順序顛倒:

 Collections.reverse(Myarray); 
2

另一個的解決方案是,如果你是利用可比較的接口,您可以切換您在compareTo(Object bCompared)中指定的輸出值。

例如:

public int compareTo(freq arg0) 
{ 
    int ret=0; 
    if(this.magnitude>arg0.magnitude) 
     ret= 1; 
    else if (this.magnitude==arg0.magnitude) 
     ret= 0; 
    else if (this.magnitude<arg0.magnitude) 
     ret= -1; 
    return ret; 
} 

幅度是數據類型在我的計劃雙的屬性。這是我的定義類頻率以相反的順序,它的大小。所以爲了解決這個問題,你需要切換<>返回的值。這給你以下幾點:

public int compareTo(freq arg0) 
{ 
    int ret=0; 
    if(this.magnitude>arg0.magnitude) 
     ret= -1; 
    else if (this.magnitude==arg0.magnitude) 
     ret= 0; 
    else if (this.magnitude<arg0.magnitude) 
     ret= 1; 
    return ret; 
} 

要使用該的compareTo的,我們只需調用Arrays.sort(mFreq),這將給你數組排序freq [] mFreq

這個解決方案的美觀(在我看來)是它可以用來對用戶定義的類進行排序,甚至比用特定屬性對它們進行排序更多。如果一個Comparable接口的實現對你來說聽起來令人生畏,我鼓勵你不要這樣想,實際上並不是這樣。這link on how to implement comparable使我更容易。希望人們能夠利用這個解決方案,並且你的喜悅甚至會被挖掘出來。

3
array.sort(function(a, b) {return b - a;}); //descending 

array.sort(function(a, b) {return a - b;}); //ascending 
0

我知道,這是一個相當古老的線程,但這裏是整型的更新版本和Java 8:

Arrays.sort(array, (o1, o2) -> o2 - o1); 

請注意,這是「01 - o2「爲正常升序(或Comparator.comparingInt())。

這也適用於任何其他類型的對象。說:

Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());