【问题标题】:Sorting an int array from highest to lowest将 int 数组从高到低排序
【发布时间】:2013-12-13 15:26:34
【问题描述】:

所以我刚刚了解了Arrays.sort(arrayName); 并将其应用到我的一个项目中,但我发现它从最低到最高排序。反正有没有让它做相反的事情? (我认为我不需要发布有问题的代码,但如果需要,我会发布它)。

【问题讨论】:

  • 您会注意到还有另一个接受Comparatorsort 方法。
  • @SotiriosDelimanolis:不要对int[] 进行排序。
  • 阅读此docs.oracle.com/javase/6/docs/api/java/util/…, java.util.Comparator)
  • @Jon OP 有一个练习。
  • @SotiriosDelimanolis 这不是练习,我认为这是Arrays 类的限制。

标签: java arrays sorting


【解决方案1】:

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

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

【讨论】:

  • 效果很好!感谢您的帮助!
【解决方案2】:

如果你有一个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++;
        }
}

【讨论】:

    【解决方案3】:

    对于某些用例,您可能只需将已排序的数组视为“反向排序”即可。例如。从最高到最低的数字进行迭代,您可能会使用

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

    【讨论】:

      【解决方案4】:
      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())
        

      【讨论】: