java Arrays.binarySearch не может найти цель

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality");  

Я всегда получаю -3. Проблема в "Name". Почему я не могу иметь "Name" в своем массиве? Есть идеи?


person user437630    schedule 09.09.2010    source источник
comment
Имя должно стоять перед качеством, а пакет — перед тестированием.   -  person Jon Skeet    schedule 09.09.2010
comment
binarySearch предназначен только для отсортированного массива.   -  person 卢声远 Shengyuan Lu    schedule 09.09.2010
comment
@ Джон, я думаю, ты имел в виду, что пакет должен быть выше качества.   -  person Bart Kiers    schedule 09.09.2010


Ответы (3)


Чтобы использовать binarySearch, вам нужно сначала отсортировать массив самостоятельно:

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

java.util.Arrays.sort(sortedArray);

int index = Arrays.binarySearch(sortedArray, "Quality");  
person Bart Kiers    schedule 09.09.2010

Массив должен быть отсортирован. Из Javadoc для binarySearch():

Диапазон должен быть отсортирован в порядке возрастания в соответствии с естественным порядком его элементов перед выполнением этого вызова. Если он не отсортирован, результаты не определены.

person Jeffrey    schedule 09.09.2010

Для работы бинарного поиска массив должен быть отсортирован. Документ Javadoc для binarySearch говорит следующее:

Массив должен быть отсортирован в порядке возрастания в соответствии с естественным порядком его элементов (как с помощью метода sort(Object[])) перед выполнением этого вызова. Если он не отсортирован, результаты не определены.

(Выделение добавлено.)

А причина проста. алгоритм бинарного поиска имеет предварительное условие, состоящее в том, что входной массив отсортирован.

person Stephen C    schedule 09.09.2010