【发布时间】:2013-09-13 18:23:07
【问题描述】:
一直在使用 binarySearch 方法,想知道为什么 Collections.binarySearch 会返回 -(insertion_point - 1) 当元素不存在且不存在 -insertion_point 时?我明白为什么它是负数,但为什么是 -1?
【问题讨论】:
标签: java
一直在使用 binarySearch 方法,想知道为什么 Collections.binarySearch 会返回 -(insertion_point - 1) 当元素不存在且不存在 -insertion_point 时?我明白为什么它是负数,但为什么是 -1?
【问题讨论】:
标签: java
因为你不能有负 0。
考虑没有-1 的情况。如果在索引 0 处找到元素,则返回 0。如果未找到元素,但其插入点为 0,则它也将返回 0。你如何区分这两种情况?加上-1,现在它们分别返回0和-1,让你区分。
它是-(insertion point) - 1,与您的问题所述略有不同。
【讨论】:
返回
搜索键的索引,如果它包含在列表中; 否则,
(-(insertion point) - 1)。插入点定义为 将键插入列表的点:索引 大于键的第一个元素,或者list.size()如果全部 列表中的元素小于指定的键。请注意,这 保证返回值将 >= 0 当且仅当键 找到了。
重要的是最后一句话:
请注意,这保证了当且仅当找到键时,返回值将 >= 0。
如果生效,您将从binarySearch 获得两个 值,以巧妙的方式组合在一起。您可以获得有关项目是否存在(通过结果的符号)以及它所属的位置(结果的大小)的信息。
【讨论】: