Java中Arrays.sort()
默认采用升序排序,但通过Comparator
或Collections.reverseOrder()
可轻松实现降序排列。 关键在于理解其底层机制与灵活运用比较器,同时结合业务场景选择最优方案。
-
默认升序原理
基本数据类型(如int[]
)直接调用Arrays.sort()
会使用快速排序算法,按数值从小到大排列。对象数组(如String[]
)则采用归并排序,遵循自然顺序(如字母表顺序)。例如,int[] {5, 2, 9}
排序后变为[2, 5, 9]
。 -
降序实现方法
- 包装类+反向比较器:将基本类型数组转为对应包装类(如
Integer[]
),调用Arrays.sort(numbers, Collections.reverseOrder())
。 - Lambda表达式:直接自定义比较规则,如
Arrays.sort(arr, (x, y) -> y - x)
实现降序,代码更简洁。 - 对象自定义排序:对复杂对象,通过
Comparator
指定字段降序,例如按Person
类的age
字段降序:Arrays.sort(people, Comparator.comparingInt(Person::getAge).reversed())
。
- 包装类+反向比较器:将基本类型数组转为对应包装类(如
-
性能与场景建议
基本类型数组的降序需额外装箱操作,可能影响性能,建议优先用于对象排序。部分排序(如仅对数组片段操作)可通过Arrays.sort(array, startIndex, endIndex)
优化资源消耗。
总结:掌握Arrays.sort()
的升降序切换技巧,能显著提升代码效率与可读性。实际开发中,建议根据数据类型和业务需求选择合适方法,并注意性能敏感场景的优化。