arrays.binarysearch查找失败时返回-(insertionpoint+1),故插入点为-(result+1);若result≥0则元素已存在。

Arrays.binarySearch 本身不直接返回插入点,但当查找失败时,它返回一个负数,通过简单计算就能得到目标值应插入的位置索引。
理解 binarySearch 的返回值含义
当目标元素存在于已排序数组中,binarySearch 返回其实际索引(≥ 0);若不存在,则返回 -(insertionPoint + 1)。这里的 insertionPoint 是按升序排列时,该元素应插入的位置(即第一个大于等于目标值的元素下标)。
因此,只要结果为负,插入点 = -(result + 1)。
正确获取插入点的通用写法
以下代码片段适用于任何已升序排序的 int 数组:
- 调用
int result = Arrays.binarySearch(arr, key); - 若
result >= 0,说明找到了,无需插入 - 若
result ,则插入位置为 <code>int pos = -(result + 1); - 注意:pos 值始终在 [0, arr.length] 范围内,等于 arr.length 表示应插在末尾
常见使用场景示例
比如数组 [1, 3, 5, 7],查找 4:
-
binarySearch返回-3(因为 4 应插在索引 2 处,而-(2 + 1) = -3) - 插入点 =
-(-3 + 1) = 2,与预期一致 - 查找
0得-1→ 插入点 =0;查找9得-5→ 插入点 =4(即数组长度)
注意事项与边界处理
必须确保数组已按升序排序,否则结果无意义;不能对 null 数组调用;插入点计算仅适用于 升序 场景(降序需另行处理)。
如果需要频繁插入并保持有序,建议配合 ArrayList 和 Collections.binarySearch,或使用 TreeSet 等集合类替代手动维护数组。











