【问题标题】:Why is -(insertion_point - 1) returned by Collections.binarySearch when an element not present and not -insertion_point? [duplicate]为什么当元素不存在且不存在 -insertion_point 时 Collections.binarySearch 返回 -(insertion_point - 1)? [复制]
【发布时间】:2013-09-13 18:23:07
【问题描述】:

一直在使用 binarySearch 方法,想知道为什么 Collections.binarySearch 会返回 -(insertion_point - 1) 当元素不存在且不存在 -insertion_point 时?我明白为什么它是负数,但为什么是 -1?

【问题讨论】:

    标签: java


    【解决方案1】:

    因为你不能有负 0。

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

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

    【讨论】:

      【解决方案2】:

      The documentation 说:

      返回

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

      重要的是最后一句话:

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-11
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2020-12-12
        • 2018-10-02
        • 2021-08-30
        相关资源
        最近更新 更多