Мне нужно найти elem
, который будет соответствовать element
.
Моя программа работает, но она не эффективна. У меня очень большое ArrayList<Obj> pairs
(более 4000 элементов), и я использую бинарный поиск, чтобы найти соответствующие индексы.Двоичный поиск по списку пар
public int search(String element) {
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < pairs.size(); i++) {
list.add(pairs.get(i).getElem());
}
return index = Collections.binarySearch(list, element);
}
Интересно, если есть более эффективный способ, чем с помощью цикла для копирования половины пара ArrayList в новый список ArrayList. Конструктор для Obj: Obj x = new Obj(String elem, String word);
Да - более эффективный способ, чтобы написать бинарный поиск для вашей пары перечисляют себя, а не создать копию списка каждый раз, когда вы вызываете поиска() –
Используйте форму * other * ['binarySearch()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#binarySearch-java.util.List-T-java.util. Comparator-) и предоставить ['Comparator'] (https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html), чтобы напрямую сравнивать элементы списка. – Andreas