Сложность обработки значений коллекции - PullRequest
1 голос
/ 14 февраля 2011

Мне нужно хранить растущее большое количество объектов в коллекции.При выполнении действий с каждым объектом коллекции мне необходимо регулярно проверять, сохранен ли объект.Если объект еще не сохранен, я добавлю его в конец коллекции.Я обрабатываю каждый объект итеративно, выполняя проверки.

Объекты, уже обработанные, не должны удаляться из коллекции, потому что я не хочу возвращать их к обработке, когда наталкиваюсь на них снова.В результате я не знаю, какая коллекция может подойти лучше всего.У HashSet есть метод «содержит» с постоянным временем, но у List есть более быстрые методы для итерации по его элементам, верно?

Что будет более разумным выбором?Было бы целесообразно одновременно хранить две разные структуры, содержащие одинаковые узлы, HashSet для проверок и LinkedList для обработки?

Ответы [ 3 ]

4 голосов
/ 14 февраля 2011

В результате я не знаю, какая коллекция может подойти лучше всего. HashSet имеет метод «содержит» с постоянным временем, но у List есть более быстрые методы для перебора его элементов, верно?

Как насчет LinkedHashSet?

Реализация хеш-таблицы и связанного списка интерфейса Set с предсказуемым порядком итераций. Эта реализация отличается от HashSet тем, что поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, то есть порядок, в котором элементы были вставлены в набор (порядок вставки)

1 голос
/ 14 февраля 2011

1) Используйте ArrayList, а не LinkedList.LinkedLists занимают много памяти, и на итерации она медленнее, чем ArrayList.

2) Я бы предложил использовать две структуры данных.Например, ради того, что вы не можете добавлять в коллекцию файлы, итерируя по ней (ConcurrentModificationException)

0 голосов
/ 14 февраля 2011

Ну, кажется, вас интересуют два вида вашей коллекции.

  1. Вид, похожий на очередь, добавление элементов в конец и проверка их впереди.
  2. А содержит чек

Все эти операции хорошо поддерживаются в разных видах кучи, например, java.util.PriorityQueue

...