Самая легкая коллекция Java - PullRequest
5 голосов
/ 11 августа 2011

Если я собираюсь создать коллекцию Java и хочу только заполнить ее элементами, а затем выполнить итерацию по ней (не зная заранее необходимого размера), т.е. все, что мне нужно, это Collection<E>.add(E) и Collection<E>.iterator(),конкретный класс выбрать?Есть ли какое-то преимущество в использовании Set, а не List, например?Какой из них будет иметь наименьшие накладные расходы?

Ответы [ 4 ]

21 голосов
/ 11 августа 2011

какой конкретный класс выбрать?

Возможно, я бы просто пошел с ArrayList или LinkedList. Оба поддерживают методы add и iterator, и соседние из них имеют значительные накладные расходы.

Есть ли преимущество, например, в использовании набора, а не списка?

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

(Я не вижу, как какая-либо реализация Set могла бы превзойти реализацию списка для методов добавления / итератора, поэтому я бы, вероятно, выбрал List, даже если мне не важен порядок.)

Какой из них будет иметь наименьшие накладные расходы?

Звучит как микро-бенчмаркинг, но если бы мне пришлось угадывать, я бы сказал ArrayList (или, возможно, LinkedList в случаях, когда ArrayLists часто перераспределяет память: -)

3 голосов
/ 11 августа 2011

Не ходите с Set. Наборы и списки различаются в зависимости от их назначения, что вы всегда должны учитывать при выборе правильного Collection

  • a List предназначен для ведения элементов в порядке их добавления; и если вы вставите один и тот же элемент дважды, он будет сохранен дважды
  • a Set предназначен для удержания одного определенного элемента ровно один раз (уникальность); порядок важен только для конкретных реализаций (например, TreeSet), но все же «одинаковые» элементы не будут добавлены дважды
2 голосов
/ 11 августа 2011

Set имеет смысл только в том случае, если вы хотите отсортировать объекты и убедиться, что дубликат элемента не «зарегистрирован». Иначе, ArrayList просто отлично.

Однако, если вы хотите добавить элементы во время итерации, лучше использовать ArrayBlockingQueue.

1 голос
/ 20 июня 2017

Вот несколько ключевых моментов, которые помогут вам выбрать свою коллекцию в соответствии с вашими требованиями -

  1. Список (ArrayList или LinkedList)

    • Допустимые повторяющиеся значения.
    • Порядок ввода сохранен.
  2. Установить

    • Не допускается дублирование значений.
    • Порядок вставки не сохраняется.

Таким образом, в соответствии с вашими требованиями список представляется подходящим выбором.

Теперь между ArrayList и LinkedList -

ArrayList - это список с произвольным доступом. Используйте, если ваша частая операция - поиск элементов.

LinkedList - лучший вариант, если вы хотите добавить или удалить элементы из списка.

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