2013-11-27 46 views
1

于是我就了解了Arrays.sort(arrayName);和我的一个工程中应用,但我发现它排序从最低到最高。反正有反其道而行吗? (我不认为我需要发布有问题的代码,但如果需要,我会发布它)。排序int数组从最高到最低

+1

你会注意到还有另一个'sort'方法接受'比较器'。 –

+3

@SotiriosDelimanolis:不要对int []进行排序。 –

+0

阅读本http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort(T [],java.util.Comprator接口) – Prateek

回答

10

如果您使用Integer[]而不是int[],则可以将Comparator作为第二个参数传递给排序方法。要实行反向排序,你可以利用Collections.reverseOrder()方法:

Arrays.sort(arr, Collections.reverseOrder()); 
+0

很棒!谢谢您的帮助! – lukeb28

0
  1. 使用Integer[]代替int[]
  2. 的使用Collections.reverseOrder():返回规定了集合的自然顺序相反的比较的实现Comparable接口
  3. 如果可能的用途ArrayList<Integer>Collections.sort(list, Collections.reverseOrder())更有力的情况下的对象。

    Integer[] intArr = new Integer[10]; 
    // add some integer 
    Arrays.sort(intArr, Collections.reverseOrder()) 
    
3

如果有int[]阵列,则可以使用Arrays.sort再反向它进行排序:

int [] tab2 = new int[]{1,5,0,-2}; 
Arrays.sort(tab2); 
ArrayUtils.reverse(tab2); 
System.out.print(Arrays.toString(tab2)); 

输出:

[5, 1, 0, -2] 

反向方法的Code(来自org.apache.commons.lang.ArrayUtils.reverse(int[])):

public static void reverse(int[] array) { 
     if (array == null) { 
      return; 
     } 
     int i = 0; 
     int j = array.length - 1; 
     int tmp; 
     while (j > i) { 
      tmp = array[j]; 
      array[j] = array[i]; 
      array[i] = tmp; 
      j--; 
      i++; 
     } 
} 
1

对于一些使用情况,您可能只是将您的排序数组视为“反向排序”。例如。从最高到最低的数字迭代,你可以使用

int[] foo = ...; 
Arrays.sort(foo); 
for (int i=foo.length-1; i>=0; i--) { 
    doSomethingWith(foo[i]); 
} 
+0

似乎比底层更多的代码。 – lukeb28