4

Been using the binarySearch method and wondering why is -(insertion_point - 1) returned by Collections.binarySearch when an element not present and not -insertion_point? I understand why it is negative, but why the -1?

4

2 回答 2

21

因为你不能有负0。

考虑没有-1. 如果在索引 0 处找到元素,则返回 0。如果未找到元素,但其插入点为 0,则它也将返回 0。你如何区分这两种情况?加上-1,现在它们分别返回0-1,让你区分。

它与-(insertion point) - 1您的问题所述略有不同。

于 2013-09-13T18:24:48.540 回答
5

文档说:

退货

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

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

请注意,这保证了当且仅当找到键时,返回值将 >= 0。

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

于 2013-09-13T18:26:43.990 回答