7

给定以下语句,取自Oracle java 教程,与 Collections 类的 binarySearch() 方法相关:

两种形式的返回值相同。如果 List 包含搜索键,则返回其索引。如果不是,则返回值为 (-(insertion point) - 1),其中插入点是值将被插入到 List 中的点,或者是大于该值或 list.size 的第一个元素的索引() 如果 List 中的所有元素都小于指定值。

为什么binarySearch()not的返回值只返回负索引而不是负索引减1?(上面引用的粗体部分)。

简而言之:为什么(-(insertion point) - 1)而不只是(-(insertion point))

提前致谢。

4

2 回答 2

20

那是因为-(insertion point)会模棱两可。您将无法区分以下内容:

  • 在位置找到的项目0
  • 未找到项目,插入点为0

-(insertion point) - 1,上述两种情况导致不同的返回值(0-1)。

于 2013-04-04T12:46:09.693 回答
7

从你的链接

这个公认的丑陋公式保证当且仅当找到搜索键时返回值将> = 0。将布尔值(找到)和整数(索引)组合成单个 int 返回值基本上是一种技巧

于 2013-04-04T12:44:36.017 回答