java中对int[]降序排序需转为integer[]再用arrays.sort(arr, collections.reverseorder()),或用stream.boxed().sorted(collections.reverseorder()),不可直接对基本类型数组使用comparator。

Java 中对整型数组(int[])进行降序排序,不能直接用 Arrays.sort() 配合 Comparator,因为 int[] 是基本类型数组,不支持泛型比较器。需要先转为包装类型数组(Integer[]),再排序,或使用 Java 8+ 的流式操作。
方法一:转成 Integer[] 后用 Arrays.sort() + Comparator
这是最常用、清晰且兼容性好的方式:
- 用
Stream或循环将int[]转为Integer[] - 调用
Arrays.sort(arr, Collections.reverseOrder())
int[] nums = {3, 1, 4, 1, 5};
Integer[] boxed = Arrays.stream(nums).boxed().toArray(Integer[]::new);
Arrays.sort(boxed, Collections.reverseOrder());
// boxed 现在是 [5, 4, 3, 1, 1]
方法二:用 Stream.sorted() 一步到位(推荐,简洁)
适合一次性处理,不需复用数组对象:
- 将原始数组转为流 → 装箱 → 排序 → 收集为数组
- 注意返回的是
Integer[],如需int[]可再 mapToInt
Integer[] sortedDesc = Arrays.stream(nums)
.boxed()
.sorted(Collections.reverseOrder())
.toArray(Integer[]::new);
若要还原为 int[](升序时用 sorted() 即可):
int[] sortedDescInt = Arrays.stream(nums)
.boxed()
.sorted(Collections.reverseOrder())
.mapToInt(Integer::intValue)
.toArray();
方法三:手动实现降序(不推荐,仅作理解)
比如用冒泡或快排手动写逻辑——效率低、易出错,仅用于学习排序原理。生产环境请优先用标准库。
- 对
int[]原地排序,每次找最大值放前面 - 时间复杂度 O(n²),无必要时避免
注意事项
别踩这些常见坑:
-
不能对 int[] 直接用 Comparator:编译报错,因为基本类型不实现
Comparable - Arrays.sort(int[]) 只支持升序,且无重载接受比较器
- 如果只是想“逆序”,且原数组已升序,可用
for循环首尾交换——但这不是排序,只是翻转
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











