根据Armans.binarySearch的Java doc(int [] a,int key)
返回:
搜索键的索引,如果它包含在数组中; 否则,( - (插入点) - 1)。插入点定义为 密钥插入数组的点:索引 大于键的第一个元素,或者所有元素的a.length 在数组中小于指定的键。请注意这一点 当且仅当密钥时,保证返回值>> = 0 找到了。
我需要理解为什么返回(-(insertion point) - 1)
,为什么不只是-(insertion point)
?
答案 0 :(得分:17)
因为如果它返回-(insertion point)
,并且插入点为0,那么你将无法区分我发现它,它在索引0 和 I没有找到它,你可以插入索引0 。
答案 1 :(得分:3)
考虑一个数组:
int intArr[] = {5,12,20,30,55};
现在考虑这两个二进制搜索语句:
System.out.println("The index of element 5 is : " + Arrays.binarySearch(intArr,5));
和
System.out.println("The index of element 4 is : " + Arrays.binarySearch(intArr,4));
<强>输出强>
The index of element 5 is : 0
The index of element 4 is : -1
因为-1
,我们可以区分两个输出。如果没有-1
,那么这两个语句都会给出相同的输出,即0
。