arrays.binarysearch仅适用于已升序排序的数组,未排序时结果不可预测;需先调用arrays.sort()排序,再调用binarysearch查找,返回≥0为找到索引,负值表示插入位置,重复元素返回任意匹配索引。

Java中Arrays.binarySearch方法只能在已排序的数组上正确工作,直接调用前必须确保数组升序排列;否则结果不可预测,可能返回负数(表示插入点)甚至错误的索引。
确保数组已排序
binarySearch不负责排序,它假设输入数组已按升序排列。如果数组无序,先调用Arrays.sort():
- 对原始数组排序:
Arrays.sort(arr); - 若不能修改原数组,可复制后排序:
int[] sorted = arr.clone(); Arrays.sort(sorted); - 注意:降序排列不支持,需手动反转或改用带Comparator的重载(仅适用于对象数组)
调用binarySearch的基本写法
对基本类型(如int[]),使用静态方法Arrays.binarySearch(int[], key):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 成功找到时返回元素的索引(≥0)
- 未找到时返回一个负值,其绝对值减1表示该key应插入的位置(即维持排序的最小索引)
- 示例:
int idx = Arrays.binarySearch(new int[]{1,3,5,7}, 5); // 返回2
处理未找到的情况
不能仅靠返回值是否为负来判断“不存在”,而应检查是否≥0:
- 正确判断:
if (idx >= 0) { /* 找到 */ } else { /* 未找到 */ } - 获取插入位置(供后续插入参考):
int insertPos = -(idx + 1); - 避免常见错误:不要写
idx == -1来判断未找到——-1只在key应插在开头时出现,其他情况返回-2、-3等
注意重复元素的返回值
当数组含重复元素时,binarySearch返回任意一个匹配项的索引,不保证是第一个或最后一个:
- 例如:
Arrays.binarySearch(new int[]{2,4,4,4,6}, 4)可能返回1、2或3 - 如需查找第一个/最后一个位置,需额外实现左边界或右边界二分搜索
- 标准库不提供此类功能,不可依赖binarySearch的结果顺序性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










