java中arrays.sort()默认升序,降序需用comparator.reverseorder()(推荐)或lambda表达式,仅适用于integer[]等对象数组;int[]等基本类型需先装箱再排序。

Java 中 Arrays.sort() 默认只支持升序排序,要实现**逆序排序(降序)**,需借助 Comparator 接口,且仅适用于**对象类型数组(如 Integer[]、String[])**,不能直接用于基本类型数组(如 int[])。
使用 Comparator.reverseOrder()(推荐,简洁)
这是最简单、可读性最好的方式,适用于实现了 Comparable 接口的包装类数组:
-
✅ 适用类型:
Integer[]、Double[]、String[]等 -
❌ 不适用:
int[]、double[]等基本类型数组(需先转为包装类数组) - 代码示例:
Integer[] arr = {3, 1, 4, 1, 5};<br>Arrays.sort(arr, Comparator.reverseOrder());<br>// 结果:[5, 4, 3, 1, 1]
使用 Lambda 表达式自定义比较逻辑
灵活可控,适合需要定制排序规则的场景(例如按绝对值、长度等):
- 对
Integer[]实现降序:
Arrays.sort(arr, (a, b) -> b.compareTo(a));
- 对
String[]按长度降序:
String[] strs = {"a", "bb", "ccc"};<br>Arrays.sort(strs, (s1, s2) -> s2.length() - s1.length());<br>// 结果:["ccc", "bb", "a"]
对基本类型数组(如 int[])实现逆序的间接方法
由于 Arrays.sort(int[]) 不接受 Comparator,必须转换为对象数组再排序:
- 使用 Stream(Java 8+):
int[] arr = {3, 1, 4, 1, 5};<br>int[] sortedDesc = Arrays.stream(arr)<br> .boxed()<br> .sorted(Collections.reverseOrder())<br> .mapToInt(Integer::intValue)<br> .toArray();
- 或手动转换(适合小数组,避免 Stream 开销):
int[] arr = {3, 1, 4, 1, 5};<br>Integer[] boxed = Arrays.stream(arr).boxed().toArray(Integer[]::new);<br>Arrays.sort(boxed, Collections.reverseOrder());<br>int[] result = Arrays.stream(boxed).mapToInt(Integer::intValue).toArray();
注意:Collections.reverse() 不适用于 Arrays.sort() 的结果
Collections.reverse() 只能用于 List,不能直接反转已排序的数组。若已有升序 Integer[],可转为 List 再反转,但效率低于直接用 Comparator.reverseOrder() 一次排好:
Integer[] arr = {1, 2, 3};<br>Arrays.sort(arr); // 升序<br>Arrays.asList(arr).sort(Collections.reverseOrder()); // ✅ 可行但绕路<br>// 更好写法:<br>Arrays.sort(arr, Collections.reverseOrder()); // 一行搞定











