Arrays.binarySearchとの戦い
// 注: アルゴリズムの性質上ソートされていないとうまく機能しない
int[] array = {2, 3, 4, 7, 8, 9, 14, 23, 56, 67, 78, 89, 90};
// NOT FOUND
int index = Arrays.binarySearch(array, 5);
さて、これが何を返すだろうか?
答えは-4
だ。
javadocによれば:
戻り値: 配列内に検索キーがある場合は検索キーのインデックス。それ以外の場合は(-(挿入ポイント) - 1)。挿入時点は、そのキーが配列に挿入される時点として定義される。つまり、そのキーよりも大きな最初の要素のインデックス。
こんな翻訳で分かるかっ! 参考:
戻り値: 配列内に検索キーがある場合は検索キーのインデックス。それ以外の場合は(-(挿入添字) - 1)。ここで、「挿入添字」は、そのキーが配列に挿入される添字として定義される。つまり、そのキーよりも大きな最初の要素のインデックスである。
―――とはいえ-4
がarray[2]
とarray[3]
の間なんて、誰が思うだろうか?