Collections.binarySearch(列表,K键)澄清。 Java的

时间:2013-04-04 12:39:14

标签: java return binary-search

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

  

两个表单的返回值相同。如果列表包含   搜索键,返回其索引。如果不是,则返回值为   ( - (插入点) - 1),其中插入点是点   其值将插入List或索引中   第一个元素大于值或list.size()如果所有元素都在   列表小于指定值。

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

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

提前致谢。

2 个答案:

答案 0 :(得分:17)

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

  • 0位置找到的项目;
  • 找不到
  • 项,插入点为0

使用-(insertion point) - 1,上述两种情况会产生不同的返回值(0-1)。

答案 1 :(得分:7)

来自您的链接

  

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

的黑客攻击