2013-04-04 45 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