2016-03-29 92 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); 
}