にソートされていることが必要です。バイナリ 検索アルゴリズムを使用して、指定したオブジェクトのためのんArrays.BinarySearchは、ドキュメントによると、配列が昇順
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)。
ドキュメントが、配列を昇順でソートする必要があると言っているのはなぜですか?
私はこれが私を混乱させると思います。この記述を、比較器が値を昇順、すなわちa [0] <... ziggy