Я должен изменить существующий код, указанный код возвращает список объектов Obj:Есть ли способ сделать List.addAll элементов сортировки нужно для поиска
public class Obj{
...fields...
private String label; //the field the search is performed on
}
от вызова службы и помещает его внутри ArrayList: Список retrievedList = ..service call ... finalList.addAll (retriedList);
Впоследствии некоторые клиенты могут попросить меня найти Obj с определенным ярлыком, сейчас поиск плохо сделано так:
for(Obj o :finalList){
if(o.getLabel().equals(label){
return o;
else
...
Есть около 100,000 Obj экземпляров в этом списке, поэтому поиск не эффективно.
Моя идея состоит в том, чтобы сначала создать класс Obj с помощью компаратора на основе метки, а затем сделать так, чтобы метод addAll относил этот компаратор таким образом, упорядочивая объекты на основе поля метки. Впоследствии реализует что-то вроде quickSort или использует более эффективную конструкцию, если Guava предоставляет любой. У вас есть идеи?
Как насчет Collections.sort (ваш список, новый yourComparator())? – user3232446
Используйте метод contains из этого списка, чтобы найти объект. Вам придется переопределить hashcode и equals. Определите «бизнес-(первичный) ключ» (не идентификатор базы данных), например «номер счета или« адрес электронной почты », который является уникальным для ваших объектов, и используйте его в hashcode и равным. – Stefan
@ user3232446 - ему придется вызвать сортировку после каждой модификации к списку (или, что еще хуже, до его запроса). Неэффективно – TheLostMind