当一个元素不存在而不是-insertion_point时,为什么 - (insertion_point - 1)由Collections.binarySearch返回?

时间:2013-09-13 18:23:08

标签: java

一直在使用binarySearch方法并想知道为什么是 - (insertion_point - 1)当一个元素不存在而不是-insertion_point时由Collections.binarySearch返回?我理解为什么它是负面的,但为什么-1?

2 个答案:

答案 0 :(得分:18)

因为你不能有负0。

如果没有-1,请考虑这种情况。如果在索引0处找到一个元素,它将返回0.如果找不到元素,但它的插入点为0,它也将返回零。你怎么能区分这两种情况?添加-1后,他们现在分别返回0-1,让您与众不同。

它是-(insertion point) - 1,与您提出的问题略有不同。

答案 1 :(得分:5)

The documentation说:

  

返回

     

搜索键的索引(如果它包含在列表中);   否则,(-(insertion point) - 1)。插入点定义为   键将插入列表的位置:索引   第一个元素大于键,或list.size()如果全部   列表中的元素小于指定的键。请注意这一点   当且仅当密钥时,保证返回值>> = 0   找到了。

重要的部分是最后一句:

  

请注意,当且仅当找到密钥时,这可以保证返回值为> = 0.

如果有效,您将从binarySearch获取两个值,并以巧妙的方式合并。您可以获得有关项目是否存在(通过结果的符号)以及它所属的位置(结果的大小)的信息。