ドキュメントによると:
public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)
二分探索アルゴリズムを使用して、指定された配列で指定されたオブジェクトを検索します。
この呼び出しを行う前に、指定されたコンパレーター(sort(T []、Comparator)メソッドなど)に従って配列を昇順でソートする必要があります。
ソートされていない場合、結果は未定義です。配列に指定されたオブジェクトと等しい複数の要素が含まれている場合、どれが見つかるかは保証されません。
上記は、配列が昇順Arrays.binarySearch
でソートされている場合にのみメソッドを使用できることを意味しますか?
以下のようにテストしました
class Unturned {
public static void main(String[] args) {
String[] chars = {"a", "b", "c", "e","f","h","i"};
MySort ms = new MySort();
Arrays.sort(chars, ms);
for(String c : chars ) System.out.print(c + " ");
System.out.println("\n" + Arrays.binarySearch(chars, "d", ms));
}
static class MySort implements Comparator<String> {
public int compare(String a, String b) {
return b.compareTo(a);
} } }
出力:
i h f e c b a
-5
-5は、正しい値cの要素に挿入ポイントを置きます。(すなわち-4-1)。
配列を昇順で並べ替える必要があるとドキュメントに記載されているのはなぜですか?