Java Arrays工具类提供sort()和binarySearch()方法:sort()支持基本类型及对象数组排序,需注意Comparable/Comparator;binarySearch()要求先排序且返回索引或插入点补码;二维数组需自定义Comparator;使用时须规避null、精度及泛型调用陷阱。
java 中的 arrays 工具类提供了开箱即用的排序和二分查找方法,无需手动实现算法,能显著提升开发效率。
直接调用 sort() 完成数组排序
Arrays.sort() 支持基本类型数组(如 int[]、double[])和对象数组(如 String[]、自定义类数组)。对基本类型,默认升序;对对象数组,要求元素实现 Comparable 接口,或传入 Comparator 自定义规则。
- 对整型数组排序:
int[] arr = {5, 2, 8, 1}; Arrays.sort(arr);→ 结果为{1, 2, 5, 8} - 对字符串数组降序:
String[] ss = {"a", "c", "b"}; Arrays.sort(ss, Collections.reverseOrder()); - 对自定义对象按字段排序:需传入 Lambda 表达式,例如
Arrays.sort(people, (p1, p2) -> Integer.compare(p1.age, p2.age));
使用 binarySearch() 前必须先排序
Arrays.binarySearch() 要求目标数组已升序排列,否则结果不可预测。它返回匹配元素的索引;未找到时返回一个负数(表示插入点的补码)。
- 正确用法:
int[] arr = {1, 3, 5, 7}; Arrays.sort(arr); int idx = Arrays.binarySearch(arr, 5); // 返回 2 - 查找失败示例:
Arrays.binarySearch(arr, 4)可能返回-3,表示若插入 4,应在索引 2 的位置(即~(-3) == 2) - 注意:该方法不支持自定义比较器的重载版本用于基本类型数组;对象数组查找时,Comparator 必须与排序时一致
处理多维数组的排序技巧
Arrays.sort() 默认只对一维数组生效。对二维数组(如 int[][]),它按引用排序行数组,通常需配合 Comparator 实现按某列排序。
- 按第一列升序:
Arrays.sort(matrix, (a, b) -> Integer.compare(a[0], b[0])); - 按第二列降序:
Arrays.sort(matrix, (a, b) -> Integer.compare(b[1], a[1])); - 若需对每行内部排序,需遍历调用:
for (int[] row : matrix) Arrays.sort(row);
避免常见陷阱
实际使用中容易忽略几个关键细节:
- 原始类型数组不能用泛型方式调用
binarySearch,比如Arrays.<integer>binarySearch(...)</integer>是无效的,应直接用对应重载方法 - 对象数组排序时若元素为
null,且未在Comparator中处理,会抛出NullPointerException -
binarySearch对浮点数数组要小心精度问题,建议优先用Double.compare()而非==判断相等

















