【问题标题】:Sorting an array in reverse order - not reversing以相反的顺序对数组进行排序 - 不反转
【发布时间】:2016-03-29 13:30:44
【问题描述】:

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

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

【问题讨论】:

  • 我明白了。我可以存储此列表,然后将其转换回数组吗?或者有没有更简单的方法对数组进行反向排序?

标签: java arrays sorting reverse


【解决方案1】:

最“简单”的解决方案是使用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 变量的顺序。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      你的代码有几个问题: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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        相关资源
        最近更新 更多