Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке каждый элемент вставлен. Пользователь может получить доступ к элементам по их целочисленному индексу (позиции в списке) и искать элементы в списке.
Коллекция, которая не содержит повторяющихся элементов. Более формально, множества не содержат пары элементов e1 и e2, таких что e1.equals (e2), и не более одного нулевого элемента. Как следует из его названия, этот интерфейс моделирует абстракцию математического набора.
Для SortedSet не существует двух элементов, где compareTo () == 0, так как equals не вызывается.
Питер Лори
34
Набор МОЖЕТ быть заказан, так что первое утверждение этого ответа вводит в заблуждение, даже если, конечно, список должен быть выбран для обеспечения исполнения
Заказа
24
НЕПРАВИЛЬНО! Набор Java можно заказать в зависимости от реализации; например, упорядочен Java TreeSet. В контексте Java единственное различие между списком и набором состоит в том, что набор содержит уникальные элементы. В контексте математики, элементы набора являются уникальными и неупорядоченными.
stackoverflowuser2010
45
Да, набор Java МОЖЕТ быть НО НЕ ОБЯЗАТЕЛЬНО заказан. Да, если у вас есть TreeSet, вы можете рассчитывать на этот заказ. Но вы должны ЗНАТЬ, что у вас есть TreeSet, а не просто Set. Если вам возвращается набор, вы не можете зависеть от того, что будет заказано. Список, с другой стороны, упорядочен по самой своей природе, и любая реализация List должна быть упорядочена. Таким образом, с точки зрения определения интерфейса, не является особенно ошибочным говорить, что набор неупорядочен, но, возможно, немного более технически правильно сказать, что набор не дает гарантии порядка элементов.
Spanky Quigman
15
Не путайте «заказано» с «отсортировано». Точно так же не объединяйте контракт интерфейса и реализации интерфейса. Также неверно говорить, что что-то «неупорядоченное» не имеет порядка, это просто означает, что нет никаких гарантий относительно выполнения заказа (и что порядок может быть нестабильным между вызовами, в отличие от упорядоченного списка).
lilbyrdie
223
╔═══════════════════╦══════════════════════╦═════════════════════════════╗║║List║Set║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║Duplicates║ YES ║ NO ║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║Order║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║PositionalAccess║ YES ║ NO ║╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Стоит отметить одну вещь: производительность позиционного доступа во многом зависит от базовой реализации, массива и связанного списка stackoverflow.com/questions/322715/…
Кристоф Руссси,
1
Как Индексируются Наборы, если не позиционным доступом? (+1 для ASCII-таблицы)
tplive
72
Упорядоченные списки элементов (уникальные или нет) Соответствуют интерфейсу Java с именемList
Доступ к индексу
реализовано с использованием
LinkedList
ArrayList
Списки уникальных элементов: соответствуют интерфейсу Java с именемSet
Can not обращаться по индексу
реализовано с использованием
HashSet (неупорядоченный)
LinkedHashSet (заказано)
TreeSet (отсортировано по естественному порядку или по предоставленному компаратору)
Оба интерфейса Setи Listсоответствуют интерфейсу Java с именемCollection
ListКак правило, допускается дублирование объектов.
Lists должны быть упорядочены и поэтому доступны по индексу.
Классы реализации включают в себя: ArrayList, LinkedList,Vector
Набор:
Sets не позволяют дублировать объекты. Большинство реализаций неупорядочены, но это зависит от реализации.
Классы реализации включают в себя:
HashSet(неупорядоченный),
LinkedHashSet(упорядоченный),
TreeSet(упорядоченный по естественному заказу или предоставленному компаратору)
Правильный. LinkedHashSet содержит элементы в порядке вставки.
ggb667
Это интерфейс, ВСЕ зависит от реализации. List.get () может создать файл, содержащий первые 5 десятичных дробей числа pi, и выдать исключение StackOverFlowException в некоторых реализациях, это не означает, что вы можете сказать «список - это то, что может создавать файлы», поскольку он не является частью контракт определяется интерфейсом. Набор претензий docs смоделирован по математической концепции набора, который по определению не упорядочен. Учитывая набор в вашем коде, вы не можете предполагать, что он упорядочен без нарушения принципов SOLID.
Сара
@kai, я обычно держусь LinkedHashSetлевой стороны, если код опирается на порядок позже. Я использую его только в том Setслучае, если я действительно использую его как единое целое, поскольку вы не можете предположить, что базовая реализация является LinkedHashSetили такой, это может произойти сегодня, но завтра код изменится и произойдет сбой.
Кристоф Русси
Если вы объявляете LinkedHashSet, вы не имеете дело с множеством, поэтому вряд ли уместно делать заявления о том, как наборы должны вести себя. Я бы сказал, что приписывание (возможной) упорядоченности множествам на основе некоторых реализаций сродни утверждению «Экземпляры Runnable имеют метод run, предназначенный для запуска в каком-либо потоке. Также они открывают соединение с БД и читают данные клиента в зависимости от реализации. " Конечно, некоторые реализации могут сделать это, но это не то, что подразумевается под Runnable Interface.
Сара
5
Возможно, это не тот ответ, который вы ищете, но JavaDoc классов коллекций на самом деле довольно нагляден. Копировать / вставить:
Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке каждый элемент вставлен. Пользователь может получить доступ к элементам по их целочисленному индексу (позиции в списке) и искать элементы в списке.
В отличие от наборов, списки обычно допускают дублирование элементов. Более формально списки обычно допускают пары элементов e1 и e2, например, e1.equals (e2), и они обычно допускают множественные нулевые элементы, если они вообще допускают нулевые элементы. Не исключено, что кто-то захочет реализовать список, который запрещает дублирование, создавая исключения времени выполнения, когда пользователь пытается вставить их, но мы ожидаем, что такое использование будет редким.
Набор - это неупорядоченная группа отдельных объектов - дублирующиеся объекты не допускаются. Обычно он реализуется с использованием хеш-кода вставляемых объектов. (Конкретные реализации могут добавлять порядок, но сам интерфейс Set - нет.)
Список - это упорядоченная группа объектов, которые могут содержать дубликаты. Это может быть реализовано с помощью ArrayList, LinkedListи т.д.
Я в замешательстве 😕! Что означает упорядоченный / неупорядоченный в этом контексте? Это связано с возрастающим и убывающим порядком? Если это так, Listне заказано 😕
malhobayyeb
4
Упорядочивается , когда входные данные располагаются точно так, как они были введены пользователем, тогда как Сортировка - когда входные данные сортируются лексикографически или в порядке возрастания / убывания (в терминах целочисленных значений). Неупорядоченный означает, что входные данные могут или не могут быть сохранены в порядке ввода пользователем.
Ахил
5
Список:
Список позволяет дублировать элементы и нулевые значения. Легко искать, используя соответствующий индекс элементов, а также он будет отображать элементы в порядке вставки. Пример: (LinkedList)
Set:
Set не допускает дублирования элементов и допускает одно нулевое значение. Он не будет поддерживать порядок отображения элементов. ТолькоTreeSet будет отображаться в порядке возрастания.
Пример: (TreeSet)
import java.util.TreeSet;publicclassSetExample{publicstaticvoid main(String[] args){// TODO Auto-generated method stubTreeSet<String> set =newTreeSet<String>();try{
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");for(String num : set){System.out.println( num);}
set.add(null);}catch(NullPointerException e){System.out.println(e);System.out.println("Set doesn't allow null value and duplicate value");}}}
Вывод:
все
привет
приветствовать
мир
java.lang.NullPointerException Set не позволяет нулевое значение и повторяющееся значение
1.List позволяет дублировать значения и установить не разрешать дубликаты
2.List поддерживает порядок, в котором вы вставили элементы в список Set, не поддерживает порядок. 3.List - упорядоченная последовательность элементов, тогда как Set - это отдельный список элементов, который неупорядочен.
1) Набор не допускает дублирования. Список позволяет дублировать. Основываясь на реализации Set, он также поддерживает порядок вставки.
например: LinkedHashSet. Это поддерживает порядок вставки. Пожалуйста, обратитесь нажмите здесь
2) содержит метод. По своей природе набор даст лучшую производительность для доступа. В лучшем случае это o (1). Но у List есть проблема с производительностью для вызова contains.
Все Listклассы поддерживают порядок вставки. Они используют разные реализации, основанные на производительности и других характеристиках (например, ArrayListдля скорости доступа к определенному индексу, LinkedListдля простого поддержания порядка). Поскольку ключа нет, дубликаты разрешены.
Эти Setклассы не поддерживают порядок ввода. Они могут опционально навязывать определенный порядок (как с SortedSet), но обычно имеют определенный порядок реализации, основанный на некоторой хэш-функции (как с HashSet). Так Setкак ключи доступны по ключу, дубликаты не допускаются.
Карты хранят объекты по ключу, но задают объекты магазина, используя уникальное значение, связанное с объектом, обычно его хеш-код. (Карты могут также использовать хеш-коды для проверки уникальности ключа, но они не обязаны это делать.)
Set ADT не определяет порядок, но некоторые реализации Set (такие как LinkedHashSet) сохраняют порядок вставки.
Майкл Майерс
3
Тем не менее, более важным отличием является то, что наборы не допускают дублирования. Сумка / мультисеть делает.
Куинн Тейлор
TreeSet имеет порядок.
stackoverflowuser2010
1
Несколько заметных различий между List и Set в Java приведены ниже:
1) Принципиальное различие между списком и множеством в Java - наличие дублирующих элементов. Список в Java позволяет дублировать, а Set не допускает дублирования. Если вы вставите дубликат в Set, он заменит старое значение. Любая реализация Set в Java будет содержать только уникальные элементы.
2) Еще одним существенным отличием List и Set в Java является порядок. Список - это упорядоченная коллекция, а набор - неупорядоченная коллекция. Список поддерживает порядок вставки элементов, означает, что любой элемент, который вставлен до этого, будет иметь более низкий индекс, чем любой элемент, который вставлен после. Набор в Java не поддерживает порядок. Хотя Set предоставляет другую альтернативу, называемую SortedSet, которая может хранить элементы Set в определенном порядке сортировки, определенном методами Comparable и Comparator объектов, хранящихся в Set.
3) Популярная реализация интерфейса List в Java включает ArrayList, Vector и LinkedList. В то время как популярная реализация интерфейса Set включает HashSet, TreeSet и LinkedHashSet.
Совершенно очевидно, что если вам нужно поддерживать порядок вставки или объект, и ваша коллекция может содержать дубликаты, то List - это путь. С другой стороны, если ваше требование состоит в том, чтобы поддерживать уникальную коллекцию без дубликатов, то Set - это путь.
Привет @ Vibha, если я хочу оба условия? Я имею в виду, я не хочу, чтобы мои данные содержали дубликаты, и я также хочу, чтобы они были в порядке.
Панадол Чонг
1
Список:
Разрешенные дубликаты.
Упорядочены в элементах группировки. (Другими словами, имеют определенный порядок. Не нужно сортировать в порядке возрастания)
Набор:
Не допускаются дубликаты.
Неупорядочено в элементах группировки. (Другими словами, не имеет определенного порядка. Может располагаться или не располагаться в порядке возрастания)
Set<E>и List<E>оба используются для хранения элементов типа E. Разница в том, что они Setхранятся в неупорядоченном виде и не допускают дублирования значений. Listиспользуется для хранения элементов упорядоченным образом и допускает дублирование значений.
Setэлементы не могут быть доступны с позиции индекса, а Listэлементы могут быть доступны с позиции индекса.
@BalusC, пожалуйста, не комментируйте, не видя дату публикации. Смотрите пост, достойный того времени.
Яша
0
Привет. Так много ответов уже дано. Позвольте мне указать на некоторые моменты, которые пока не упомянуты:
Большинство реализаций List (ArrayList, Vector) реализуютRandomAccess интерфейс, который является интерфейсом маркера для более быстрого доступа. Ни одна из реализаций Set не делает этого.
Список использует один специальный итератор, ListIteratorкоторый называется итерация в обоих направлениях . Set использует Iterator, который поддерживает только одностороннюю итерацию
HashSet занимает в 5,5 раз больше памяти, чем ArrayList для хранения того же количества элементов.
@smurti, это немного поздно, и я не уверен, что вы заметили, но ваш первый пункт противоречит самому себе: «Большинство реализаций List (ArrayList, Vector) реализуют RandomAccess ...» и «... Ни один из списка реализации делают это "
Питер М
0
Самое большое отличие - это основная концепция.
Из интерфейса Set и List . Набор это математическая концепция. Метод set расширяет коллекцию. Однако мы не можем добавлять новый метод. size () означает кардинальность (больше - BitSet.cardinality, линейный счетчик , Log Log Log HyperLogLog ). addAll () означает объединение. retainAll () означает пересечение. removeAll () означает разницу.
Однако список не хватает этих понятий. Список добавляет много методов для поддержки концепции последовательности, которую интерфейс Collection не предоставляет. Основная концепция - ИНДЕКС . как добавить (индекс, элемент), получить (индекс), поиск (indexOf ()), удалить (индекс) элемент. Список также предоставляет подсписок « Представление коллекции » . Набор не имеет вид. не имеют позиционного доступа. Список также предоставляет множество алгоритмов в классе Коллекции . сортировки (List), BinarySearch (Список), обратный (список), перемешайте (List), заливку (List). Параметр метода является интерфейсом List . повторяющиеся элементы являются просто результатом концепций. не существенная разница.
Таким образом, существенная разница заключается в концепции. Набор - это математический набор. Список - это концепция последовательности.
Вот наглядный пример с Groovy. Я создаю набор и список. Затем я пытаюсь сохранить 20 случайно сгенерированных значений в каждом списке. сгенерированное значение может быть в диапазоне от 0 до 5
s =[] as Set
l =[]
max =5
print "random Numbers :"20.times{
e =(int)Math.random()*max
s << e
l << e
print "$e, "}
println "\n"
println "Set : $s "
println "list : $l
Набор:
Набор не может иметь дублирующихся элементов в своих коллекциях. это также неупорядоченная коллекция. Чтобы получить доступ к данным из Set, требуется использовать только итератор, и получение на основе индекса для него невозможно. Он в основном используется всякий раз, когда требуется сбор уникальности.
Список:
Список может иметь повторяющиеся элементы с упорядоченным натуральным порядком при вставке. Таким образом, могут быть получены данные на основе индекса или итератора. Он широко используется для хранения коллекции, доступ к которой требуется на основе индекса.
Я только что прошел самую важную тему Java под названием Collections Framework. Я думал поделиться своими маленькими знаниями о коллекциях с вами. Список, Набор, Карта - самая важная тема этого. Итак, начнем с List и Set.
Разница между списком и множеством:
List - это класс коллекции, который расширяет AbstractListкласс, где Set - это класс коллекции, который расширяет AbstractSetкласс, но оба реализуют интерфейс Collection.
Интерфейс списка допускает дублирование значений (элементов), тогда как интерфейс Set не допускает дублирования значений. В случае дублирования элементов в Set он заменяет более старые значения.
Интерфейс списка допускает значения NULL, в то время как интерфейс Set не допускает значения NULL. В случае использования нулевых значений в Set это дает NullPointerException.
Интерфейс списка поддерживает порядок вставки. Это означает, как мы добавляем элементы в список таким же образом, как мы получаем его, используя итератор или для каждого стиля. Принимая во внимание, что Setреализации не обязательно поддерживают порядок вставки. (Хотя SortedSetиспользует TreeSet, и LinkedHashSetподдерживает порядок вставки).
Интерфейс List имеет свои собственные определенные методы, тогда как интерфейс Set не имеет своего собственного метода, поэтому Set использует только методы интерфейса Collection.
Интерфейс List имеет один унаследованный класс, Vectorтогда как интерфейс Set не имеет унаследованного класса.
И последнее, но не менее важное ... listIterator()Метод можно использовать только для циклического перемещения по элементам в List Classes, тогда как мы можем использовать метод iterator () для доступа к элементам Set класса.
Что-нибудь еще мы можем добавить? Пожалуйста, дайте мне знать.
С одной стороны , Listи Setинтерфейсы , которые также имеют «базовые» внедрения в виде абстрактного класса (которые вы упомянули). Кроме того, # 3 является полностью неточным , так как большинство наборов допускает нулевые значения (но зависит от реализации). Я не понимаю № 5 и № 7, и № 6 Vectorне является устаревшим, а просто синхронизирован и не предпочтителен для использования, кроме случаев, когда необходима синхронизация.
glen3b
-3
Набор:
Не может иметь повторяющихся значений. Порядок зависит от реализации. По умолчанию он не упорядочен. Не может иметь доступ по индексу.
Список:
Может иметь повторяющиеся значения. Упорядочено по умолчанию. Может иметь доступ по индексу.
Ответы:
List
является упорядоченной последовательностью элементов, тогдаSet
как это отдельный список элементов, который неупорядочен (спасибо, Куинн Тейлор ).List<E>:
Set<E>:
источник
источник
Упорядоченные списки элементов (уникальные или нет)
Соответствуют интерфейсу Java с именем
List
Доступ к индексу
реализовано с использованием
Списки уникальных элементов:
соответствуют интерфейсу Java с именем
Set
Can not обращаться по индексу
реализовано с использованием
Оба интерфейса
Set
иList
соответствуют интерфейсу Java с именемCollection
источник
Набор не может содержать повторяющиеся элементы, в то время как Список может. Список (в Java) также подразумевает порядок.
источник
Концептуально мы обычно ссылаемся на неупорядоченную группировку, которая допускает дублирование как Мешок и не допускает дублирование как Набор.
источник
Список
Набор
источник
Список:
List
Как правило, допускается дублирование объектов.List
s должны быть упорядочены и поэтому доступны по индексу.Классы реализации включают в себя:
ArrayList
,LinkedList
,Vector
Набор:
Set
s не позволяют дублировать объекты. Большинство реализаций неупорядочены, но это зависит от реализации.Классы реализации включают в себя:
HashSet
(неупорядоченный),LinkedHashSet
(упорядоченный),TreeSet
(упорядоченный по естественному заказу или предоставленному компаратору)источник
Поскольку мы говорим об интерфейсах Java, почему бы не взглянуть на Javadoc ?!
List
- упорядоченная коллекция (последовательность), которая обычно допускает дублированиеSet
- это коллекция, которая не содержит повторяющихся элементов, порядок итераций может быть гарантирован реализациейНет никакого упоминания об отсутствии порядка относительно множеств: это зависит от реализации.
источник
LinkedHashSet
левой стороны, если код опирается на порядок позже. Я использую его только в томSet
случае, если я действительно использую его как единое целое, поскольку вы не можете предположить, что базовая реализация являетсяLinkedHashSet
или такой, это может произойти сегодня, но завтра код изменится и произойдет сбой.Возможно, это не тот ответ, который вы ищете, но JavaDoc классов коллекций на самом деле довольно нагляден. Копировать / вставить:
источник
Набор - это неупорядоченная группа отдельных объектов - дублирующиеся объекты не допускаются. Обычно он реализуется с использованием хеш-кода вставляемых объектов. (Конкретные реализации могут добавлять порядок, но сам интерфейс Set - нет.)
Список - это упорядоченная группа объектов, которые могут содержать дубликаты. Это может быть реализовано с помощью
ArrayList
,LinkedList
и т.д.источник
List
не заказано 😕Список:
Список позволяет дублировать элементы и нулевые значения. Легко искать, используя соответствующий индекс элементов, а также он будет отображать элементы в порядке вставки. Пример: (LinkedList)
Вывод:
1
1
555
333
888
555
null
null
Значение: 1
Значение: 555
Значение: 333
Значение: 888
Значение: 555
Значение: ноль
Значение: ноль
Set:
Set не допускает дублирования элементов и допускает одно нулевое значение. Он не будет поддерживать порядок отображения элементов. Только
TreeSet
будет отображаться в порядке возрастания.Пример: (TreeSet)
Вывод:
все
привет
приветствовать
мир
java.lang.NullPointerException
Set не позволяет нулевое значение и повторяющееся значение
источник
1.List позволяет дублировать значения и установить не разрешать дубликаты
2.List поддерживает порядок, в котором вы вставили элементы в список Set, не поддерживает порядок. 3.List - упорядоченная последовательность элементов, тогда как Set - это отдельный список элементов, который неупорядочен.
источник
Список против множества
1) Набор не допускает дублирования. Список позволяет дублировать. Основываясь на реализации Set, он также поддерживает порядок вставки.
например:
LinkedHashSet
. Это поддерживает порядок вставки. Пожалуйста, обратитесь нажмите здесь2) содержит метод. По своей природе набор даст лучшую производительность для доступа. В лучшем случае это o (1). Но у List есть проблема с производительностью для вызова
contains
.источник
Все
List
классы поддерживают порядок вставки. Они используют разные реализации, основанные на производительности и других характеристиках (например,ArrayList
для скорости доступа к определенному индексу,LinkedList
для простого поддержания порядка). Поскольку ключа нет, дубликаты разрешены.Эти
Set
классы не поддерживают порядок ввода. Они могут опционально навязывать определенный порядок (как сSortedSet
), но обычно имеют определенный порядок реализации, основанный на некоторой хэш-функции (как сHashSet
). ТакSet
как ключи доступны по ключу, дубликаты не допускаются.источник
Порядок ... у списка есть порядок, у набора нет.
источник
Несколько заметных различий между List и Set в Java приведены ниже:
1) Принципиальное различие между списком и множеством в Java - наличие дублирующих элементов. Список в Java позволяет дублировать, а Set не допускает дублирования. Если вы вставите дубликат в Set, он заменит старое значение. Любая реализация Set в Java будет содержать только уникальные элементы.
2) Еще одним существенным отличием List и Set в Java является порядок. Список - это упорядоченная коллекция, а набор - неупорядоченная коллекция. Список поддерживает порядок вставки элементов, означает, что любой элемент, который вставлен до этого, будет иметь более низкий индекс, чем любой элемент, который вставлен после. Набор в Java не поддерживает порядок. Хотя Set предоставляет другую альтернативу, называемую SortedSet, которая может хранить элементы Set в определенном порядке сортировки, определенном методами Comparable и Comparator объектов, хранящихся в Set.
3) Популярная реализация интерфейса List в Java включает ArrayList, Vector и LinkedList. В то время как популярная реализация интерфейса Set включает HashSet, TreeSet и LinkedHashSet.
Совершенно очевидно, что если вам нужно поддерживать порядок вставки или объект, и ваша коллекция может содержать дубликаты, то List - это путь. С другой стороны, если ваше требование состоит в том, чтобы поддерживать уникальную коллекцию без дубликатов, то Set - это путь.
источник
Список:
Набор:
источник
Set<E>
иList<E>
оба используются для хранения элементов типаE
. Разница в том, что ониSet
хранятся в неупорядоченном виде и не допускают дублирования значений.List
используется для хранения элементов упорядоченным образом и допускает дублирование значений.Set
элементы не могут быть доступны с позиции индекса, аList
элементы могут быть доступны с позиции индекса.источник
Привет. Так много ответов уже дано. Позвольте мне указать на некоторые моменты, которые пока не упомянуты:
RandomAccess
интерфейс, который является интерфейсом маркера для более быстрого доступа. Ни одна из реализаций Set не делает этого.ListIterator
который называется итерация в обоих направлениях . Set использует Iterator, который поддерживает только одностороннюю итерациюисточник
Самое большое отличие - это основная концепция.
Из интерфейса Set и List . Набор это математическая концепция. Метод set расширяет коллекцию. Однако мы не можем добавлять новый метод. size () означает кардинальность (больше - BitSet.cardinality, линейный счетчик , Log Log Log HyperLogLog ). addAll () означает объединение. retainAll () означает пересечение. removeAll () означает разницу.
Однако список не хватает этих понятий. Список добавляет много методов для поддержки концепции последовательности, которую интерфейс Collection не предоставляет. Основная концепция - ИНДЕКС . как добавить (индекс, элемент), получить (индекс), поиск (indexOf ()), удалить (индекс) элемент. Список также предоставляет подсписок « Представление коллекции » . Набор не имеет вид. не имеют позиционного доступа. Список также предоставляет множество алгоритмов в классе Коллекции . сортировки (List), BinarySearch (Список), обратный (список), перемешайте (List), заливку (List). Параметр метода является интерфейсом List . повторяющиеся элементы являются просто результатом концепций. не существенная разница.
Таким образом, существенная разница заключается в концепции. Набор - это математический набор. Список - это концепция последовательности.
источник
Вот наглядный пример с Groovy. Я создаю набор и список. Затем я пытаюсь сохранить 20 случайно сгенерированных значений в каждом списке. сгенерированное значение может быть в диапазоне от 0 до 5
Результат :
случайные числа:
4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Набор :
[4, 1, 0, 2, 3]
список:
[4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Вы можете видеть, что разница в том, что:
источник
Как и ответ, так как SET не имеет повторяющегося значения, а List может. Конечно, порядок это еще одна вещь, чтобы отличать их друг от друга.
источник
Набор: Набор не может иметь дублирующихся элементов в своих коллекциях. это также неупорядоченная коллекция. Чтобы получить доступ к данным из Set, требуется использовать только итератор, и получение на основе индекса для него невозможно. Он в основном используется всякий раз, когда требуется сбор уникальности.
Список: Список может иметь повторяющиеся элементы с упорядоченным натуральным порядком при вставке. Таким образом, могут быть получены данные на основе индекса или итератора. Он широко используется для хранения коллекции, доступ к которой требуется на основе индекса.
источник
Название темы: Список VS Set
Я только что прошел самую важную тему Java под названием Collections Framework. Я думал поделиться своими маленькими знаниями о коллекциях с вами. Список, Набор, Карта - самая важная тема этого. Итак, начнем с List и Set.
Разница между списком и множеством:
List - это класс коллекции, который расширяет
AbstractList
класс, где Set - это класс коллекции, который расширяетAbstractSet
класс, но оба реализуют интерфейс Collection.Интерфейс списка допускает дублирование значений (элементов), тогда как интерфейс Set не допускает дублирования значений. В случае дублирования элементов в Set он заменяет более старые значения.
Интерфейс списка допускает значения NULL, в то время как интерфейс Set не допускает значения NULL. В случае использования нулевых значений в Set это дает
NullPointerException
.Интерфейс списка поддерживает порядок вставки. Это означает, как мы добавляем элементы в список таким же образом, как мы получаем его, используя итератор или для каждого стиля. Принимая во внимание, что
Set
реализации не обязательно поддерживают порядок вставки. (ХотяSortedSet
используетTreeSet
, иLinkedHashSet
поддерживает порядок вставки).Интерфейс List имеет свои собственные определенные методы, тогда как интерфейс Set не имеет своего собственного метода, поэтому Set использует только методы интерфейса Collection.
Интерфейс List имеет один унаследованный класс,
Vector
тогда как интерфейс Set не имеет унаследованного класса.И последнее, но не менее важное ...
listIterator()
Метод можно использовать только для циклического перемещения по элементам в List Classes, тогда как мы можем использовать метод iterator () для доступа к элементам Set класса.Что-нибудь еще мы можем добавить? Пожалуйста, дайте мне знать.
Спасибо.
источник
List
иSet
интерфейсы , которые также имеют «базовые» внедрения в виде абстрактного класса (которые вы упомянули). Кроме того, # 3 является полностью неточным , так как большинство наборов допускает нулевые значения (но зависит от реализации). Я не понимаю № 5 и № 7, и № 6Vector
не является устаревшим, а просто синхронизирован и не предпочтителен для использования, кроме случаев, когда необходима синхронизация.Набор:
Не может иметь повторяющихся значений. Порядок зависит от реализации. По умолчанию он не упорядочен. Не может иметь доступ по индексу.
Список:
Может иметь повторяющиеся значения. Упорядочено по умолчанию. Может иметь доступ по индексу.
источник