2011-09-14 65 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