按相反顺序对数组进行排序 - 不反转

时间:2016-03-29 13:30:44

标签: java arrays sorting reverse

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

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。为什么它没有被反转,或者为什么数组没有永久存储在其反转状态?

3 个答案:

答案 0 :(得分:2)

最“简单”的解决方案是使用reverseComperator类提供的Collections。这将按降序自动对数组进行排序。

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变量的顺序。

答案 1 :(得分:0)

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

以相反顺序排序的更直接的方法是:

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

答案 2 :(得分:0)

您的代码中存在以下几个问题: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);
}