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

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

Ответы [ 24 ]

3 голосов
/ 16 августа 2014

Список Vs Set

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

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

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

3 голосов
/ 21 сентября 2015

Список:
Список позволяет дублировать элементы и нулевые значения. Легко искать, используя соответствующий индекс элементов, а также он будет отображать элементы в порядке вставки. Пример: (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
Значение: нуль
Значение: нуль

Установка:
Set не допускает дублирования элементов и допускает одно нулевое значение. Он не будет поддерживать порядок отображения элементов. Только 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 не допускает нулевое значение и повторяющееся значение

3 голосов
/ 19 ноября 2010

1.List позволяет дублировать значения, а set - не разрешать дубликаты

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

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

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

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

1 голос
/ 07 марта 2013

Список:

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

Set:

  1. Недопустимые дубликаты.
  2. Неупорядочено в элементах группировки (другими словами, не имеет определенного порядка. Может располагаться или не располагаться в порядке возрастания)
1 голос
/ 24 июня 2009

Упорядочение ... у списка есть заказ, у набора нет.

1 голос
/ 04 февраля 2013

Несколько заметных различий между 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 - это путь.

0 голосов
/ 21 сентября 2015

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

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

0 голосов
/ 14 ноября 2016

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

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

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

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

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