为何使用Arrays.binarySearch查找12时返回-6而非-1?
为什么Arrays.binarySearch查找不存在的12时返回-6而非-1?
先来看你的代码和运行结果:
代码示例:
int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79}; System.out.println("1. Index is " + Arrays.binarySearch(list, 11)); System.out.println("2. Index is " + Arrays.binarySearch(list, 12));
运行结果:
- Index is 4
- Index is -6
这其实是Arrays.binarySearch()的既定规则:当查找的元素不在有序数组中时,它不会返回简单的-1,而是返回-(插入点) - 1。这里的「插入点」指的是如果把目标元素插入数组后,仍能保持数组有序的位置索引(从0开始计数)。
针对你查找12的场景:
- 数组里比12小的最后一个元素是11(索引为4),所以12的正确插入位置是索引5(夹在11和45之间)。
- 套入公式计算:
-(5) - 1 = -6,这就是最终返回-6的原因。
这个设计其实很实用——它不仅告诉你目标元素不存在,还直接给出了插入位置,省去了你后续再计算插入点的麻烦。
内容的提问来源于stack exchange,提问作者BlueJapan
相关产品推荐
相关产品推荐

