коллекции binarySearch с использованием ArrayList

Я прошу прощения за глупый вопрос, я искал о том, как использовать двоичный поиск с моим ArrayList следующим образом:

List<Integer> arrList = new ArrayList<Integer>();       
        arrList.add(3); 
        arrList.add(5); 
        arrList.add(7);
        arrList.add(2);

Проблема в том, когда я использую:

Collections.sort(arrList);
Collections.reverse(arrList);
int indeks = Collections.binarySearch(arrList, 7);

значение Indeks всегда равно -5, я подумал, что должно быть 2, потому что после обращения к myArrList результат будет выглядеть так:

[7, 5, 3, 2]

Так что я должен сделать здесь, чтобы получить правильные показатели 7 ...? заранее спасибо

 Sotirios Delimanolis07 июн. 2016 г., 04:18
Что делает JavadocbinarySearch сказать?
 Hyosoka Poipo07 июн. 2016 г., 04:28
мммм ... я не читал ...: v

Ответы на вопрос(2)

Решение Вопроса

Collections.binarySearch() ожидает, что элементы будут в порядке возрастания:

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

Если вы хотите выполнить бинарный поиск в нисходящем списке, используйтеComparator.reverseOrder():

int indeks = Collections.binarySearch(arrList, 7, Comparator.reverseOrder());

indeks теперь 0, что соответствует первому элементу списка.

Обратите внимание, что вы можете использовать один и тот же компаратор для сортировки списка по убыванию вместо сортировки по возрастанию, а затем наоборот:

Collections.sort(arrList, Comparator.reverseOrder());
 Hyosoka Poipo07 июн. 2016 г., 04:28
Спасибо, господин Шмосель ... :)

binarySearch() результаты не определены, если список не отсортирован впо возрастанию порядок. Перевернув ваш список, он сортируется в порядке убывания, отсюда и результаты, которые вы видите.

ОтJavadoc:

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

 Hyosoka Poipo07 июн. 2016 г., 04:28
Спасибо за ваш ответ Mr.Robby .. :)

Ваш ответ на вопрос