KisaragiEffective.github.io

Yeet.

View on GitHub

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)。ここで、「挿入添字」は、そのキーが配列に挿入される添字として定義される。つまり、そのキーよりも大きな最初の要素のインデックスである。

―――とはいえ-4array[2]array[3]の間なんて、誰が思うだろうか?