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

rai*_*inz 4 java

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

Jam*_*gne 19

因为你不能有负0.

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

-(insertion point) - 1与你提出的问题略有不同.


Jos*_*lor 5

文件说:

返回

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

最重要的部分是最后一句话:

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

如果有效,你会得到两个binarySearch,以巧妙的方式组合.您可以获得有关项目是否存在(通过结果的符号)以及它所属的位置(结果的大小)的信息.