Согласно документации:
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).
Почему в документации говорится, что массив должен быть отсортирован в порядке возрастания?