Java数组排序下降?

AFK*_*AFK 255 java arrays sorting int

是否有任何简单的方法按降序对数组进行排序,就像它们在Arrays类中按升序排序一样?

或者我必须停止懒惰并自己这样做:[

小智 305

您可以使用它来排序所有类型的对象

sort(T[] a, Comparator<? super T> c) 

Arrays.sort(a, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

Arrays.sort()不能直接用于按降序对原始数组进行排序.如果尝试Arrays.sort()通过传递定义的反向比较器来调用该方法Collection.reverseOrder(),则会抛出错误

没有为sort(int [],比较器)找到合适的方法

这将适用于Integer数组,但不适用于int数组.

按降序对基本数组进行排序的唯一方法是,首先按升序对数组进行排序,然后将数组反转到位.对于二维原始数组也是如此.

  • 它不能对基元数组进行排序 (102认同)
  • 将基元转换为各自的对象.int的整数,double的double,布尔的布尔值等. (14认同)
  • 如果您仍想使用自定义[比较器](http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html):`Collections.reverseOrder(this)` (11认同)
  • Arrays.sort() 不能直接用于按降序对原始数组进行排序。如果您尝试通过传递 Collection.reverseOrder() 定义的反向 Comparator 来调用 Arrays.sort() 方法,它将抛出错误 - “没有找到适合 sort(int[],comarator&lt;object&gt;) 的方法” 那将使用 Integer 数组可以正常工作,但不适用于 int 数组。按降序对原始数组进行排序的唯一方法是,首先按升序对数组进行排序,然后将数组原地反转。对于二维原始数组也是如此。 (2认同)

小智 90

你可以用这个:

    Arrays.sort(data, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

Collections.reverseOrder()Comparator使用逆自然顺序返回a .您可以使用自己的比较器获得反转版本Collections.reverseOrder(myComparator).

  • OP希望对数组进行排序.`Collections.sort()`将`List`作为输入参数,而不是数组. (8认同)
  • +1用于解释如何使用自己的比较器. (3认同)
  • 此代码无法按原样对int []进行排序。 (2认同)

Orn*_*ter 90

列表

Collections.sort(list, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

对于一个数组

Arrays.sort(array, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

  • int [] array = {2,4,3,6,8,7}; Arrays.sort(array,Collections.reverseOrder()); 给我一个错误!错误是:"在类型阵列的方法的排序(INT [])是不适用的参数(INT [],比较器的<object>)" (20认同)
  • int不是Object.请尝试使用Integer []. (7认同)
  • int是主要类型,而Integer则不是.这就是为什么Integer有像parse,toString等方法的原因. (6认同)
  • 为什么Integer []工作而不是int []? (2认同)

小智 53

另一种选择可能是(数字!!!)

  1. 将Array乘以-1
  2. 分类
  3. 再次乘以-1

直译:

array = -Arrays.sort(-array)
Run Code Online (Sandbox Code Playgroud)

  • 如果我们对数字进行排序,这种方法实际上是有创意的,即使它不是通用的并且可能导致溢出问题...... (7认同)
  • @line你必须多次-1到数组.上面的代码是伪代码.你可以在for循环中多次-1到数组然后调用Array.sort()方法,最后你再次多次-1到数组. (6认同)
  • 这是原始类型的非常好的答案.你是天才. (2认同)
  • 除非它对于Integer.MIN_VALUE(或使用任何原语)都会“失败”。最好先进行sort(),再进行reverse(),但是您必须自己进行反转,因为它们没有添加Arrays.reverse()实现。 (2认同)
  • @Halil İbrahim Oymacı:-array 语法对我不起作用:“一元运算符‘-’的错误操作数类型 int[]” (2认同)

小智 47

没有明确的比较:

Collections.sort(list, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

明确的比较器:

Collections.sort(list, Collections.reverseOrder(new Comparator()));
Run Code Online (Sandbox Code Playgroud)


kim*_*udi 14

不能直接int[] arr = {1, 2, 3};使用Arrays.sort()and对原始数组(即)进行反向排序,Collections.reverseOrder()因为这些方法需要引用类型 ( Integer) 而不是原始类型 ( int)。

但是,我们可以使用 Java 8 Stream 首先将数组装箱以逆序排序:

// an array of ints
int[] arr = {1, 2, 3, 4, 5, 6};

// an array of reverse sorted ints
int[] arrDesc = Arrays.stream(arr).boxed()
    .sorted(Collections.reverseOrder())
    .mapToInt(Integer::intValue)
    .toArray();

System.out.println(Arrays.toString(arrDesc)); // outputs [6, 5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)


小智 8

首先,您需要使用以下方法对数组进行排序:

Collections.sort(myArray);
Run Code Online (Sandbox Code Playgroud)

然后,您需要使用以下方法将顺序从升序反转为降序:

Collections.reverse(myArray);
Run Code Online (Sandbox Code Playgroud)


Mic*_*ung 7

Java 8:

Arrays.sort(list, comparator.reversed());
Run Code Online (Sandbox Code Playgroud)

更新: reversed()反转指定的比较器.通常,比较器按升序排序,因此这会将顺序更改为降序.

  • 它适用于对象,但不适用于基元。对于 sort 原始 int,您应该按 ASC 顺序排序,然后反转答案。 (3认同)

Jos*_*lac 5

对于包含基元元素的数组,如果org.apache.commons.lang(3)可以使用的话,可以使用简单的方法来反转数组(排序后):

ArrayUtils.reverse(array);
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是(如这些答案的注释中所述)不适用于我的答案所针对的原语。当然,我的答案当然不是最佳答案,但我发现它符合原始作者强调的“简单”标准-即。`Arrays.sort(primitives); ArrayUtils.reverse(primitives);` (5认同)

小智 5

当数组是 Integer 类的类型时,您可以使用以下内容:

Integer[] arr = {7, 10, 4, 3, 20, 15};
Arrays.sort(arr, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

当数组是 int 数据类型时,您可以使用以下内容:

int[] arr = {7, 10, 4, 3, 20, 15};
int[] reverseArr = IntStream.rangeClosed(1, arr.length).map(i -> arr[arr.length-i]).toArray();
Run Code Online (Sandbox Code Playgroud)