Arrays.sort()是Java最常用高效的内置排序工具,支持基本类型数组(双轴快排/归并排序,可排序子区间但不支持降序)和对象数组(需Comparable或Comparator,注意null、稳定性及多维数组限制)。

Java 中 Arrays.sort() 是最常用、最高效的内置排序工具,它能直接对基本类型数组和对象数组排序,无需手动实现算法。关键在于理解不同重载方法的适用场景和限制条件。
基本类型数组:直接调用,升序排列
对 int[]、double[]、char[] 等基本类型数组,Arrays.sort() 提供了专用重载方法,底层使用双轴快排(针对 int/long/short/byte)或归并排序(针对 char/float/double),性能稳定且无需额外依赖。
- 直接传入数组即可完成升序排序,例如:
int[] nums = {3, 1, 4, 1, 5};<br>Arrays.sort(nums); // 结果:[1, 1, 3, 4, 5] - 支持排序子区间,通过指定起始索引(含)和结束索引(不含):
Arrays.sort(nums, 1, 4); // 仅对索引 1~3 的元素排序 - 不支持降序——基本类型无法传入
Comparator,如需逆序,可排序后手动翻转,或转为包装类型再用Comparator.reverseOrder()
对象数组:必须满足可比性或提供比较器
对 String[]、Integer[]、自定义类数组等引用类型,Arrays.sort() 要求元素具备自然顺序(实现 Comparable)或显式传入 Comparator。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 已实现
Comparable的类(如String、Integer)可直接排序:String[] words = {"banana", "apple", "cherry"};<br>Arrays.sort(words); // 按字典序升序 - 自定义类需实现
Comparable接口并重写compareTo()方法,否则运行时报ClassCastException - 不修改类定义时,可用 Lambda 或方法引用传入
Comparator:Person[] people = {...};<br>Arrays.sort(people, (a, b) -> a.getAge() - b.getAge()); // 按年龄升序
注意事项与常见陷阱
几个容易出错但文档常被忽略的细节:
-
基本类型 vs 包装类型不能混用:传
int[]会走基本类型重载;传Integer[]则走对象重载。二者排序行为一致,但泛型擦除后不可互换 -
null 元素在对象数组中会抛
NullPointerException(除非Comparator显式处理 null,例如用Comparator.nullsFirst()) -
不是稳定排序:对于相等元素,
Arrays.sort()不保证原始相对位置(尤其基本类型版本),若需稳定排序,应使用Collections.sort()配合Arrays.asList()(仅适用于对象数组) -
多维数组只排序第一层引用:如
int[][] matrix调用sort(),只是对各行引用重新排列,不会对每行内部排序
掌握这些要点,就能准确、安全地使用 Arrays.sort() 完成绝大多数排序任务,避免运行时异常和逻辑偏差。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










