Arrays.sort()底层对基本类型用双轴快排、对象数组用TimSort,支持全数组/范围排序及自定义Comparator,原地修改、无需手动实现且经JDK深度优化。

Java中使用Arrays.sort()对数组排序非常简单,它底层基于双轴快排(针对基本类型)或TimSort(针对对象数组),性能稳定且经过高度优化,无需手动实现快排逻辑。
基本用法:对基本类型数组排序
适用于int[]、double[]、char[]等,直接调用静态方法即可,默认升序:
-
int[] arr = {5, 2, 8, 1}; Arrays.sort(arr);→ 结果为{1, 2, 5, 8} - 支持指定范围排序:
Arrays.sort(arr, fromIndex, toIndex),注意toIndex是**不包含**的右边界
对对象数组排序(如String、自定义类)
要求元素实现Comparable接口,或传入Comparator:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 默认排序:
String[] words = {"banana", "apple", "cherry"}; Arrays.sort(words); - 自定义规则(如按长度):
Arrays.sort(words, Comparator.comparing(String::length)); - 对自定义类排序时,需确保类有自然顺序(实现
Comparable),或显式提供Comparator
注意事项与常见问题
Arrays.sort()是原地排序,不返回新数组,直接修改原数组;多线程环境下需自行同步;对基本类型数组不能用Comparator(会编译报错):
- 错误写法:
Arrays.sort(intArr, Comparator.naturalOrder());—— 编译不通过 - 正确替代(若需降序):
Integer[] boxed = Arrays.stream(intArr).boxed().toArray(Integer[]::new); Arrays.sort(boxed, Collections.reverseOrder()); - 小数组或已近似有序时,TimSort仍保持高效;极端情况(如大量重复元素)下双轴快排也做了去重优化
与手写快排对比的优势
不必处理分区逻辑、递归边界、栈溢出风险或三数取中等优化细节:
- JDK实现已针对缓存友好性、分支预测、数据局部性做了深度调优
- 自动选择算法策略:小数组用插入排序,大数组用双轴快排或归并(对象数组)
- 经过长期验证,稳定性与安全性远超多数手写版本
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










