以相反的顺序对数组进行排序 - 不是反转

Sorting an array in reverse order - not reversing

我正在尝试从最高到最低对整数数组进行排序。

int[] array = {2, 6, 4, 1};    
Arrays.sort(array);
Collections.reverse(Arrays.asList(array));
for (int num : array) {
    System.out.println(num);
}

这将按升序打印数组 - 1, 2, 4, 6。为什么它没有被反转,或者为什么数组没有以反转状态永久存储?

您显示的是数组排序的结果,而不是反转列表的结果。您需要将排序后的列表存储在一个临时变量中,将其反转,然后调用 toArray 以获得所需的行为。

更直接的倒序排序方式是:

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

最 "easy" 的解决方案是使用 Collections class 提供的 reverseComperator。这将自动按降序对数组进行排序。

public static void main(String[] args) {
    // Use the Wrapper class, otherwise you can´t call Arrays.sort with a comperator.
    Integer[] array = {2, 6, 4, 1};
    Arrays.sort(array, Collections.reverseOrder());
    for (int num : array) {
        System.out.println(num);
    }
}

为什么你的解决方案不起作用。
您临时创建了一个带有 Arrays.asList(array) 的列表,您将其反转,之后不再引用该列表。这不会更改 array 变量的顺序。

您的代码中存在几个问题:Arrays.asList 没有创建新的 List<Integer>,它实际上是一个 List<int[]>。但即使它按预期工作,返回的列表只是一个临时对象,您仍在打印数组。

不幸的是,正确的解决方案不是很优雅:

int[] array = {2, 6, 4, 1};    
Arrays.sort(array);
List<Integer> asList = new ArrayList<Integer>(); 
for(int i : array) {
    asList.add(i);
}
Collections.reverse(asList);
for (int num : asList) {
    System.out.println(num);
}