如果我有一个如下所示的数组:
int[] arr = {6, 12, 3, 9, 8, 25, 10};
为什么这会返回-2
:
Arrays.binarySearch(arr, 8);
我知道binarySearch
仅在数组排序时才有效。我的问题是什么决定了返回的索引?
答案 0 :(得分:3)
正如@assylias在评论中提到的binarySearch的文档我可以引用它
<强>返回:强> 搜索关键字的索引,如果它包含在指定范围内的数组中;否则,( - (插入点) - 1)。插入点定义为键将插入到数组中的点:范围中第一个元素的索引大于键,或者如果范围中的所有元素都小于指定键,则为toIndex。请注意,当且仅当找到密钥时,这可以保证返回值>> =。
所以基本上这就是你试图搜索未排序数组时发生的事情:
{6, 12, 3, 9, 8, 25, 10}
9
并将其与搜索到的元素8
进行比较,因为8
较低需要较低的一半{6, 12, 3}
12
与8
进行比较,并且由于8
再次降低,所以需要降低一半{6}
6
不等于8
,因为它是最后一个找不到你想要的元素(-(insertion point) - 1)
所在的insertion point
范围内第一个元素的索引大于键
1
,因为第一个元素大于8
是12
而且它的索引是1
(-1 - 1)
,等于-2
希望我已经回答了你的问题。