В чем разница между Set и List? - PullRequest
378 голосов
/ 24 июня 2009

В чем принципиальная разница между интерфейсами Set<E> и List<E>?

Ответы [ 24 ]

471 голосов
/ 24 июня 2009

List - упорядоченная последовательность элементов, тогда как Set - это отдельный список элементов, который неупорядочен (спасибо, Куинн Тейлор ).

List<E>:

Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в список каждого элемента вставлен. пользователь может получить доступ к элементам по их целочисленный индекс (позиция в списке), и поиск элементов в списке.

Set<E>:

Коллекция, которая не содержит дубликаты элементов. Более формально, наборы не содержат пары элементов e1 и е2 такие, что е1.equals (е2), и при самый один нулевой элемент. Как следует из его имя, этот интерфейс моделирует математический набор абстракций.

205 голосов
/ 19 июля 2013
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
69 голосов
/ 24 июня 2009

Упорядоченные списки элементов (уникальные или нет)
Соответствует интерфейсу Java с именем List
Может быть доступен по индексу

реализовано с использованием

  • LinkedList
  • ArrayList

Списки уникальных элементов:
Соответствует интерфейсу Java с именем Set
Может ли не быть доступен по индексу

реализовано с использованием

  • HashSet (неупорядоченный)
  • LinkedHashSet (заказано)
  • TreeSet (отсортировано по естественному порядку или по предоставленному компаратору)

Оба интерфейса Set и List соответствуют интерфейсу Java с именем Collection

26 голосов
/ 24 июня 2009

Набор не может содержать повторяющиеся элементы, в то время как Список может. Список (в Java) также подразумевает порядок.

16 голосов
/ 24 июня 2009
  • Список - это упорядоченная группа товаров
  • Набор - это неупорядоченная группировка предметов без дубликатов (обычно)

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

10 голосов
/ 17 ноября 2011

Список

  1. Упорядоченная группировка элементов.
  2. Список используется для сбора элементов с дубликатами.
  3. Новые методы определены внутри списка интерфейс.

Установить

  1. Неупорядоченная группировка элементов.
  2. Набор используется для сбора элементов без дубликатов.
  3. В интерфейсе Set не определены новые методы, поэтому мы должны использовать методы интерфейса Collection только с подклассами Set.
9 голосов
/ 05 октября 2010

List:

List s, как правило, допускают дублирование объектов. List s должны быть заказаны и поэтому доступны по индексу.

Классы реализации включают в себя: ArrayList, LinkedList, Vector

комплект:

Set s делают not , допускают дублирование объектов. Большинство реализаций неупорядочены, но это зависит от реализации.

Классы реализации включают в себя: HashSet (неупорядочено), LinkedHashSet (заказано), TreeSet (заказывается в натуральном порядке или по предоставленному компаратору)

7 голосов
/ 06 марта 2013

Поскольку мы говорим об интерфейсах Java, почему бы не взглянуть на Javadoc?!

  • A List - упорядоченная коллекция (последовательность), которая обычно позволяет дубликаты
  • A Set a - коллекция, в которой нет повторяющихся элементов, итерация заказ может быть гарантирован реализацией

НЕТ упоминаний об отсутствии порядка в отношении множеств: это зависит от реализации.

5 голосов
/ 24 июня 2009

Возможно, это не тот ответ, который вы ищете, но JavaDoc классов коллекций на самом деле довольно описательный. Копировать / вставить:

Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в список каждого элемента вставлен. пользователь может получить доступ к элементам по их целочисленный индекс (позиция в списке), и поиск элементов в списке.

В отличие от наборов, списки обычно позволяют дубликаты элементов. Более формально, списки обычно допускают пары элементы е1 и е2 такие, что e1.equals (e2), и они обычно разрешить несколько пустых элементов, если они разрешить нулевые элементы вообще. Это не немыслимо, что кто-то может пожелать реализовать список, который запрещает дубликаты, бросая время выполнения исключения, когда пользователь пытается вставить их, но мы ожидаем, что это использование быть редким.

5 голосов
/ 24 июня 2009

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

Список - это упорядоченная группа объектов, которые могут содержать дубликаты. Это может быть реализовано с ArrayList, LinkedList и т. Д.

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