2016-03-29 91 views
0

我正在尝试从最高到最低排序一个整数数组。按相反顺序对数组进行排序 - 不可逆

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

+0

我明白了。我可以存储这个列表,然后将其转换回数组?还是有更简单的方法来反向排序数组? – KOB

回答

2

最“简单”的解决办法是使用由Collections类提供的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变量的顺序。

0

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

更直接的方式以相反的顺序排序是要做到:

Arrays.sort(array, (o1,o2)-> Integer.compare(o2,o1)); 
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); 
}