«Запрашивать» список - PullRequest
0 голосов
/ 20 июня 2011

У меня есть список таких объектов:

ArrayList<Phone> list = new ArrayList();
list.add(new Phone("+44 20 8765 4321", "mobile", "26"));
list.add(new Phone("+44 20 8765 4322", "home", "23"));
list.add(new Phone("+44 20 8765 4323", "mobile", "27"));
list.add(new Phone("+44 20 8765 4324", "work", "26"));
list.add(new Phone("+44 20 8765 4325", "home", "27"));
list.add(new Phone("+44 20 8765 4326", "home", "26"));

(23, 26, 27 - идентификаторы контакта). Как я могу «запросить» этот список, чтобы получить идентификаторы контактов, которые имеют более одного телефонного номера {"26", "27"}?

Мне нужно оптимальное решение, которое не хранит много мелких объектов в памяти (моя плохая реализация заставляет GC часто запускаться, останавливая телефон на длительное время).

1 Ответ

0 голосов
/ 20 июня 2011

Можете ли вы использовать этот алгоритм?

Set<String> dupIds = new HashSet<String>();
Set<String> set = new HashSet<String>();

for (Phone p: list) {
  if (set.contains(p.id)) {
     dupIds.add(p.id);
  } else {
     set.add(p.id);
  }
}

dupIds содержит дубликаты идентификаторов в конце процесса, и я не вижу здесь слишком много мелких объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...