В чем разница между Set и List?

В чем принципиальное отличие интерфейсов Set<E> и List<E>?

Ответы

Ответ 1

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

List<E>:

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

Set<E>:

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

Ответ 2

╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝

Ответ 3

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

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

  • LinkedList
  • ArrayList

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

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

List

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

Set

  • Является неупорядоченной группировкой элементов.
  • Set используется для сбора элементов без дубликатов.
  • Внутри интерфейса Set не определены новые методы, поэтому мы должны использовать методы интерфейса Collection только с помощью подклассов Set.

Ответ 7

Список:

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

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

Set:

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

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

Ответ 8

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

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

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

Ответ 9

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

Список представляет собой упорядоченную группу объектов, которая может содержать дубликаты. Он может быть реализован с помощью ArrayList, LinkedList и т.д.

Ответ 10

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

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

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

Ответ 11

1.List позволяет дублировать значения и устанавливать does'nt разрешает дубликаты

2.List поддерживает порядок, в который вы вставили элементы в список Set не поддерживает порядок. 3.List - упорядоченная последовательность элементов, тогда как Set - это отдельный список неупорядоченных элементов.

Ответ 12

Список Vs Set

1) Набор не позволяет дублировать. Список позволяет дублировать. Основываясь на реализации Set, он также поддерживает порядок вставки.

например: LinkedHashSet. Он поддерживает порядок вставки. Пожалуйста, обратитесь нажмите здесь

2) содержит метод. По характеру набора это даст лучшую производительность для доступа. Лучше всего его o (1). Но List имеет проблемы с производительностью для вызова contains.

Ответ 13

Список:
Список позволяет дублировать элементы и нулевые значения. Простой поиск с использованием соответствующего индекса элементов, а также отображение элементов в порядке размещения. Пример: (LinkedList)

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

Вывод:

1
1
555
333
888
555
ноль
ноль
Значение: 1
Значение: 555
Значение: 333
Значение: 888
Значение: 555
Значение: нулевой
Значение: нулевой

Задавать:
Множество не допускает дублирования элементов и допускает одиночное нулевое значение. Он не будет поддерживать какой-либо порядок отображения элементов. TreeSet будет отображаться в порядке возрастания.

Пример: (TreeSet)

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<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 не разрешает нулевое значение и дублирующее значение

Ответ 14

Все классы List поддерживают порядок вставки. Они используют разные реализации на основе производительности и других характеристик (например, ArrayList для скорости доступа к определенному индексу, LinkedList для простого поддержания порядка). Поскольку ключ отсутствует, дубликаты разрешены.

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

Ответ 15

Заказ... список имеет порядок, в наборе нет.

Ответ 16

Несколько примечаний, достойных различий между списком и множеством в Java, приведены ниже:

1) Фундаментальное различие между List и Set в Java позволяет дублировать элементы. Список на Java допускает дубликаты, а Set не позволяет дублировать. Если вы вставляете дубликат в Set, он заменит старое значение. Любая реализация Set в Java будет содержать только уникальные элементы.

2) Еще одно существенное различие между List и Set в Java - это порядок. Список - это упорядоченная коллекция, а Set - неупорядоченная коллекция. Список поддерживает порядок вставки элементов, означает, что любой элемент, который вставлен до этого, будет идти ниже индекса, чем любой элемент, который вставлен после. Набор в Java не поддерживает какой-либо порядок. Хотя Set предоставляет другую альтернативу SortedSet, которая может хранить элементы Set в определенном порядке сортировки, определенные методами Comparable и Comparator для объектов, хранящихся в Set.

3). Популярная реализация интерфейса List в Java включает ArrayList, Vector и LinkedList. Хотя популярная реализация Set включает в себя HashSet, TreeSet и LinkedHashSet.

Довольно ясно, что если вам нужно поддерживать порядок вставки или объект, и ваша коллекция может содержать дубликаты, чем список, это путь. С другой стороны, если ваше требование состоит в том, чтобы поддерживать уникальную коллекцию без каких-либо дубликатов, чем Set, это путь.

Ответ 17

Список:

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

Set:

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

Ответ 18

Set<E> и List<E> используются для хранения элементов типа E. Разница в том, что Set хранится неупорядоченным способом и не допускает повторяющихся значений. List используется для хранения элементов упорядоченным способом и позволяет дублировать значения.

Элементы

Set не могут быть доступны по позиции индекса, и к элементам List можно получить доступ с позиции индекса.

Ответ 19

Duplicity

Set doesnt       разрешить дубликаты. Набор и все классы, которые       Устанавливает интерфейс должен иметь уникальные элементы.  Список позволяет       повторяющиеся элементы. Можно добавить любое количество повторяющихся элементов       в список, не затрагивая одни и те же существующие ценности и их       индексов.

Нулевые значения

List allows any number of null values.
Set allows single null value at most

Заказ

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

реализация классов

List: ArrayList, LinkedList 
Set: HashSet, LinkedHashSet, TreeSet 

Ответ 20

Разница, основанная на следующих точках

1) Duplicity: List позволяет дублировать элементы. Любое количество повторяющихся элементов может быть вставлено в список, не затрагивая одни и те же существующие значения и их индексы. Набор не позволяет дублировать. Set и все классы, которые реализуют интерфейс Set, должны иметь уникальные элементы.

2) Null values: List позволяет любое количество нулевых значений. Set позволяет использовать одиночное нулевое значение.

3) Заказ: список и все его классы реализации поддерживают порядок вставки. Set не поддерживает какой-либо заказ; еще несколько его классов сортируют элементы в таком порядке, как LinkedHashSet, который поддерживает элементы в порядке размещения.

Ответ 21

Привет. Так много ответов уже дано. Позвольте мне указать на некоторые моменты, которые пока не упомянуты:

  • Большинство реализаций List (ArrayList, Vector) реализуют интерфейс RandomAccess который является интерфейсом маркера для более быстрого доступа. Ни одна из реализаций Set не делает этого.
  • Список использует один специальный итератор под названием ListIterator который поддерживает итерацию в обоих направлениях. Set использует Iterator, который поддерживает только одностороннюю итерацию
  • HashSet занимает 5,5 раз больше памяти, чем ArrayList для хранения того же количества элементов.

Ответ 22

Разница между множеством и последовательностью

последовательность - это перечисляемая коллекция объектов, в которых разрешены повторы. Количество элементов называется длиной последовательности. В отличие от набора, одни и те же элементы могут появляться несколько раз в разных позициях в последовательности, а также порядок имеет значение.

Ответ 23

Вот ясный пример с 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

Результат:

случайные числа: 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 не позволяет дублировать значения.
  • Список позволяет дублировать значения.

Ответ 24

Как и ответ, поскольку SET не имеет повторяющегося значения и List может. Разумеется, порядок - это еще одно отличие от них.

Ответ 25

Set: У набора не может быть дубликатов элементов в своих коллекциях. это также неупорядоченная коллекция. Чтобы получить доступ к данным из Set, требуется использовать только Iterator, и для него невозможно получить индекс. Он в основном используется всякий раз, когда требуется сбор уникальности.

Список: Список может иметь повторяющиеся элементы с естественным упорядоченным по мере его ввода. Таким образом, могут быть получены данные на основе индекса или итератора. Он широко используется для хранения коллекции, которая должна получить доступ по индексу.

Ответ 26

ТЕМА Имя: Список VS Set

Я только что перешел к самой важной теме Java под названием Collections Framework. Я решил поделиться с вами небольшими знаниями о Коллекциях. Список, набор, карта являются наиболее важной темой. Итак, начните с List и Set.

Разница между списком и множеством:

  • Список - это класс коллекции, который расширяет класс AbstractList, где Set - это класс коллекции, который расширяет класс AbstractSet, но оба реализуют интерфейс Collection.

  • Интерфейс списка позволяет дублировать значения (элементы), тогда как интерфейс Set не позволяет дублировать значения. В случае дублирования элементов в Set он заменяет старые значения.

  • Интерфейс списка допускает значения NULL, где в качестве интерфейса Set не допускается значение Null. В случае использования значений Null в Set оно дает NullPointerException.

  • Интерфейс списка поддерживает порядок вставки. Это означает, что мы добавляем элементы в список так же, как мы получаем его с использованием итератора или для каждого стиля. В то время как реализации Set не обязательно поддерживают порядок вставки. (Хотя SortedSet использует TreeSet, а LinkedHashSet поддерживает порядок вставки).

  • В интерфейсе List есть свои собственные методы, тогда как Set interface не имеет собственного метода, поэтому Set использует только методы интерфейса Collection.

  • В интерфейсе List есть один класс legacy, называемый Vector, тогда как в интерфейсе Set нет никакого унаследованного класса

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

Что-нибудь еще можно добавить? Пожалуйста, дайте мне знать.

Спасибо.

Ответ 27

Set:

Невозможно иметь повторяющиеся значения Заказ зависит от реализации. По умолчанию он не упорядочен Невозможно получить доступ по индексу

Список:

Может иметь повторяющиеся значения По умолчанию Может иметь доступ по индексу