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?
问问题
2233 次
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 回答