2011-09-14 88 views
23

可能重複:排序int數組


Sort arrays of primitive types in descending order
Java : How to sort an array of floats in reverse order?
How do I reverse an int array in Java?

下面的代碼將在陣列中升序順序排序

我需要在降序排列的順序。我如何使用比較器來做到這一點?

請幫忙。

+4

是它的功課? –

+2

...............編號 – android

+0

我剛剛創建了一個[使用自定義比較器對原始數組進行排序的庫](https://github.com/mintern-java/primitive#java-原始)。第一個「樣本用法」是按降序對「int []」進行排序。 –

回答

17

對於基本數組類型,你會寫一個反向排序算法:

或者,您也可以將您的int[]轉換爲Integer[]和寫一個比較器:

public class IntegerComparator implements Comparator<Integer> { 

    @Override 
    public int compare(Integer o1, Integer o2) { 
     return o2.compareTo(o1); 
    } 
} 

,或者使用Collections.reverseOrder(),因爲它僅適用於非原始數組類型。

最後,

Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1); 
Arrays.sort(a2, new IntegerComparator()); // OR 
// Arrays.sort(a2, Collections.reverseOrder()); 

//Unbox the array to primitive type 
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2); 
+0

錯誤convertPrimitiveArrayToBoxableTypeArray(a1) – android

+0

@android,該方法**從不**存在,這是我創建的一個例子,用於從'int []'轉換爲'Integer []'。 –

+0

如果我從int轉換爲Integer,那麼我可以使用Collections.reverseOrder,但我必須再次轉換爲int.Is這種高效?我認爲它更好的方法是在Aarrays.sort()之後逆向轉換數組 – android

5

Guava有一個方法Ints.asList()創建List<Integer>支持int[]陣列。你可以在Collections.sort中使用它來將比較器應用到底層數組。

List<Integer> integersList = Ints.asList(arr); 
Collections.sort(integersList, Collections.reverseOrder()); 

請注意,後者是由實際數組支持的實時列表,所以它應該非常高效。

+0

是的,我知道。其實我想知道有沒有辦法使用比較器。 – android

+0

@android,沒有比較器的工作對象,而不是基元。 –

+0

@android看到我更新的ArrayUtils –

4

如果它不是一個大/多頭排列只是反映它:

for(int i = 0; i < arr.length/2; ++i) 
{ 
    temp = arr[i]; 
    arr[i] = arr[arr.length - i - 1]; 
    arr[arr.length - i - 1] = temp; 
} 
+2

是的,我知道that.Actually我想知道的是有使用方法比較器, – android

+0

不在基元上。比較器必須實施,因爲它是一個接口。 –

+0

感謝您的幫助 – android

5
Comparator<Integer> comparator = new Comparator<Integer>() { 

     @Override 
     public int compare(Integer o1, Integer o2) { 
      return o2.compareTo(o1); 
     } 
    }; 

    // option 1 
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 }; 
    Arrays.sort(array, comparator); 

    // option 2 
    int[] array2 = new int[] { 1, 24, 4, 4, 345 }; 
    List<Integer>list = Ints.asList(array2); 
    Collections.sort(list, comparator); 
    array2 = Ints.toArray(list); 
+0

感謝您的幫助 – android