一直在使用binarySearch方法并想知道为什么是 - (insertion_point - 1)当一个元素不存在而不是-insertion_point时由Collections.binarySearch返回?我理解为什么它是负面的,但为什么-1?
答案 0 :(得分:18)
因为你不能有负0。
如果没有-1
,请考虑这种情况。如果在索引0处找到一个元素,它将返回0.如果找不到元素,但它的插入点为0,它也将返回零。你怎么能区分这两种情况?添加-1
后,他们现在分别返回0
和-1
,让您与众不同。
它是-(insertion point) - 1
,与您提出的问题略有不同。
答案 1 :(得分:5)
返回
搜索键的索引(如果它包含在列表中); 否则,
(-(insertion point) - 1)
。插入点定义为 键将插入列表的位置:索引 第一个元素大于键,或list.size()
如果全部 列表中的元素小于指定的键。请注意这一点 当且仅当密钥时,保证返回值>> = 0 找到了。
重要的部分是最后一句:
请注意,当且仅当找到密钥时,这可以保证返回值为> = 0.
如果有效,您将从binarySearch
获取两个值,并以巧妙的方式合并。您可以获得有关项目是否存在(通过结果的符号)以及它所属的位置(结果的大小)的信息。