Java Arrays.binarySearch не может найти цель - PullRequest
7 голосов
/ 09 сентября 2010
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

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

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

Ответы [ 3 ]

25 голосов
/ 09 сентября 2010

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

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

java.util.Arrays.sort(sortedArray);

int index = Arrays.binarySearch(sortedArray, "Quality");  
6 голосов
/ 09 сентября 2010

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

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

2 голосов
/ 09 сентября 2010

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

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

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

И причина проста. Алгоритм двоичного поиска имеет предварительное условие сортировки входного массива.

...