arrays.binarysearch要求数组升序排列,否则结果不可靠;未排序需先arrays.sort();返回值≥0表示找到,负值表示未找到且-(index+1)为插入位置;注意类型匹配与重载版本。

直接用 Arrays.binarySearch 就行,但得确保数组已升序排列,否则结果不可靠。
确认数组已按升序排序
该方法只对升序排列的数组有效。如果数组是降序、乱序或部分有序,必须先调用 Arrays.sort() 排好序(注意:这会改变原数组顺序)。
- 原始数组:
int[] arr = {5, 2, 8, 1, 9};→ 必须先Arrays.sort(arr)变成{1, 2, 5, 8, 9} - 若数组来自外部且明确已排序(如数据库分页结果、预处理列表),可跳过排序步骤
调用 binarySearch 的基本写法
语法简单,传入数组和要找的目标值即可:
int index = Arrays.binarySearch(arr, target);- 返回值是目标值的下标(从 0 开始),若找到;若没找到,返回一个负数,其绝对值表示插入点(即如果把 target 插入数组保持有序,它应放的位置)
- 例如在
{1, 3, 5, 7}中查4,返回-3,因为4应插在索引2(即第 3 个位置),而-(2 + 1) = -3
处理未找到的情况
不能只看返回值是否为负,而要判断是否 ≥ 0 来确认是否存在:
-
正确写法:
if (index >= 0) { /* 找到了 */ } else { /* 没找到 */ } - 别用
index == -1判断失败——这是常见误区,-1 只是“未找到”中的一种可能返回值 - 若需插入位置,可用
-(index + 1)得到应插入的索引
注意类型匹配和重载版本
方法有多个重载,支持基本类型数组和 Object[],但要求类型一致:
- 查
int[]用binarySearch(int[], int);查String[]要用binarySearch(String[], String) - 对
Object[],元素必须实现Comparable,或额外传入Comparator - 不要用
int[]调用接收Object[]的版本——编译不通过











