Java中Arrays.sort()和Arrays.binarySearch()的正确使用关键在于前提条件与类型匹配:基本类型数组排序不支持Comparator,需转包装类;对象数组须实现Comparable或传Comparator;binarySearch前必须已排序,否则结果无效。

Java里用Arrays.sort()和Arrays.binarySearch()完成排序与查找,关键不是“会不会调用”,而是清楚什么时候该排序、怎么传参、为什么搜不到——多数问题都出在前提没满足或类型没对齐。
基本类型数组排序要留意限制
int[]、double[]这类数组调用sort()最简单,但也有硬性约束:
- 不支持直接传
Comparator,写Arrays.sort(arr, Comparator.reverseOrder())会编译失败 - 如需降序,先升序再手动翻转,或转成
Integer[]再用比较器 - 底层用双轴快排,小数组自动切插入排序,重复值多时效率仍高
对象数组排序必须处理比较逻辑
String[]、自定义类数组不能直接靠sort(arr)就完事:
- 元素未实现
Comparable,运行时抛ClassCastException - 按字段排序必须显式传
Comparator,比如Arrays.sort(people, Comparator.comparing(p -> p.age)) - 底层用TimSort,稳定且对部分有序数据敏感,相同字段值的相对顺序不会变
binarySearch前必须确保已排序
binarySearch()不验证输入是否有序,结果完全不可信:
立即学习“Java免费学习笔记(深入)”;
- 未排序数组上调用,返回值无意义;哪怕返回≥0,也不代表真找到
- 查到返回索引,查不到返回
-(insertionPoint + 1),比如返回-3表示应插在索引2位置 - 浮点数搜索慎用
==判断,建议配合Double.compare()自定义比较器
二维数组和边界操作有特定写法
一维数组是基础,实际中常遇到更复杂结构:
-
int[][] matrix调sort()只按首元素排序行引用,需用Comparator指定列,如(a,b) -> Integer.compare(a[1], b[1]) - 想对每行内部排序,得遍历:
for (int[] row : matrix) Arrays.sort(row) - 只排子区间用三参数版本:
Arrays.sort(arr, 2, 6)表示从索引2(含)到6(不含)


















