2013-04-04 50 views
4

考虑下面的语句,从this甲骨文Java教程采取相关的类集合的的binarySearch()方法:Collections.binarySearch(List list,K key)澄清。 Java的

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

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

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

在此先感谢。

+0

因为如果它不在列表中,但应该位于'0'位置,否则将如何显示? – maba 2013-04-04 12:44:50

回答

14

这是因为-(insertion point)将是暧昧黑客攻击。您将无法区分以下内容:

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

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

+0

好酷,谢谢。 – Rollerball 2013-04-04 12:48:49

7

从你的链接

这个不可否认的难看的公式是保证返回的值将> = 0,当且仅如果搜索键被发现。它基本上是一个将布尔(发现)和一个整数(指数)合并成一个单一的int返回值

+0

用简单的话说好吗? – Rollerball 2013-04-04 12:46:12