В чем разница между listOf и setOf в Котлине? [Дубликат]

вам нужно добавить класс [System.Serializable] в PlayerItem, например:

using System;
[System.Serializable]
public class PlayerItem   {
    public string playerId;
    public string playerLoc;
    public string playerNick;
}
337
задан JJJ 15 September 2012 в 09:45
поделиться

26 ответов

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

List<E>:

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

Set<E>:

< blockquote>

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

436
ответ дан Community 21 August 2018 в 04:21
поделиться
  • 1
    Для SortedSet нет двух элементов, где compareTo () == 0, поскольку equals не вызывается. – Peter Lawrey 25 June 2009 в 18:52
  • 2
    Набор CAN можно заказать, поэтому первая формулировка этого ответа вводит в заблуждение, даже если, конечно, список должен быть выбран для обеспечения порядка сбора – Samuel EUSTACHI 6 March 2013 в 13:00
  • 3
    НЕПРАВИЛЬНО! Набор Java может быть заказан, в зависимости от реализации; например, упорядочивается Java TreeSet. В контексте Java единственная разница между List и Set заключается в том, что Set содержит уникальные элементы. В контексте математики элементы набора являются уникальными и неупорядоченными. – stackoverflowuser2010 19 October 2013 в 01:21
  • 4
    Да, набор Java МОЖЕТ быть НО, но НЕ ОБЯЗАТЕЛЬНО упорядочен. Да, если у вас есть TreeSet, вы можете рассчитывать на то, что он будет заказан. Но вы должны ЗНАТЬ, что у вас есть TreeSet, а не только Set. Если вам возвращен Set, вы не можете зависеть от того, что нужно заказать. Список с другой стороны упорядочен по самой своей природе, и любая реализация списка должна быть заказана. Итак, на терминах определения интерфейса, не особенно неправильно говорить, что набор неупорядочен, но, может быть, немного технически правильно сказать, что Set не гарантирует гарантии порядка элементов. – Spanky Quigman 21 November 2013 в 00:28
  • 5
    Не конфликтовать & quot; заказывать & quot; с "отсортированным". Точно так же не конфликтовать контракт интерфейса и реализации интерфейса. Также неверно говорить, что что-то, что является «неупорядоченным», не имеет порядка, это просто означает, что нет никаких гарантий относительно реализации заказа (и что порядок может быть нестабильным между вызовами, в отличие от упорядоченного списка). – lilbyrdie 10 April 2014 в 16:35

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

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

-1
ответ дан Arvind Chavhan 21 August 2018 в 04:21
поделиться

Список:

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

Set:

  1. Не допускается дублирование.
  2. Неупорядочено в группировке элементов (другими словами, не имеет определенного порядка. Возможно, в порядке возрастания)
0
ответ дан ChrisF 21 August 2018 в 04:21
поделиться

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

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

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

7
ответ дан Christophe Roussy 21 August 2018 в 04:21
поделиться
  • 1
    Верный. LinkedHashSet содержит элементы в порядке размещения. – ggb667 2 December 2013 в 17:03
  • 2
    Это интерфейс, все зависит от реализации. List.get () может создать файл, содержащий первые 5 десятичных знаков pi, и бросить исключение StackOverFlowException в некоторых реализациях, это не означает, что вы можете сказать «Список - это то, что может создавать файлы», так как это не является частью контракт, определенный интерфейсом. Заявка docs утверждает, что модель моделируется после математической концепции набора, который по определению не упорядочен. Учитывая набор в вашем коде, вы не можете предположить, что он заказан без нарушения принципов SOLID. – kai 30 November 2015 в 16:38
  • 3
    @kai, я обычно оставляю LinkedHashSet с левой стороны, если позже код будет основываться на заказе. Я использую только Set, если я действительно использую его как один, так как вы не можете предположить, что базовая реализация - это LinkedHashSet или такая, она может быть сегодня, но завтра код изменится, и он не сработает. – Christophe Roussy 30 November 2015 в 17:44
  • 4
    Если вы объявите LinkedHashSet, вы не имеете дело с Set, поэтому утверждение о том, как Sets должно вести себя, вряд ли имеет значение. Я бы сказал, что приписывание (возможно) упорядоченности множеств, основанных на некоторых реализациях, сродни словам «Экземпляры Runnable» имеют метод запуска, предназначенный для запуска в каком-то потоке. Также они открывают соединение БД и считывают данные клиента в зависимости от реализации. & Quot; Конечно, некоторые реализации могут это сделать, но это не то, что подразумевается под управлением Runnable Interface. – kai 1 December 2015 в 09:28

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

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

Разница между List и Set:

  1. List - это класс коллекции, который расширяет класс AbstractList, где в качестве Set является классом коллекции, который extends AbstractSet, но оба реализуют интерфейс Collection.
  2. Интерфейс списка позволяет дублировать значения (элементы), тогда как интерфейс Set не позволяет дублировать значения. В случае дубликатов элементов в Set он заменяет старые значения.
  3. Интерфейс списка позволяет NULL-значения, где в качестве интерфейса установки не допускаются значения Null. В случае использования значений Null в Set это дает NullPointerException.
  4. Интерфейс List поддерживает порядок вставки. Это означает, что мы добавляем элементы в список так же, как мы получаем его с использованием итератора или для каждого стиля. В то время как реализации Set не обязательно поддерживают порядок вставки. (Хотя SortedSet использует TreeSet, а LinkedHashSet поддерживает порядок вставки).
  5. Интерфейс List имеет свои собственные методы, определенные, тогда как Set interface не имеет собственного метода, поэтому Set использует только методы интерфейса Collection .
  6. В интерфейсе List есть один унаследованный класс с именем Vector, тогда как в интерфейсе Set нет никакого унаследованного класса
  7. Последнее, но не менее ... Метод listIterator() может быть только используется для циклического перемещения элементов в классах классов, тогда как мы можем использовать метод iterator () для доступа к элементам Set class

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

Спасибо.

8
ответ дан glen3b 21 August 2018 в 04:21
поделиться
  • 1
    Во-первых, List и Set являются интерфейсами, которые также имеют «базовые». реализаций в виде абстрактного класса (который вы упомянули). Кроме того, # 3 является полностью неточным , так как большинство наборов допускают нулевые значения (но зависят от реализации). Я не понимаю # 5 и # 7, а для # 6 Vector не является устаревшим, но просто синхронизирован и не рекомендуется для использования, кроме случаев, когда требуется синхронизация. – glen3b 16 June 2014 в 19:14
  • Список - упорядоченная группировка элементов
  • Набор - неупорядоченная группировка элементов без разрешенных разрешений (обычно)

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

15
ответ дан Hardwareguy 21 August 2018 в 04:21
поделиться
  • 1
    У набора не может быть дубликатов. – karim79 23 June 2009 в 21:34
  • 2
    Некоторые упорядоченные реализации упорядочены (например, LinkedHashSet, который поддерживает LinkedList за кулисами). Но Set ADT не имеет порядка. – Michael Myers♦ 23 June 2009 в 21:36

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

-1
ответ дан Hongtao 21 August 2018 в 04:21
поделиться

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

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

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

5
ответ дан Jeroen van Bergen 21 August 2018 в 04:21
поделиться

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

Результат:

random Numbers: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

Set: [4, 1, 0, 2, 3]

list: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

Вы можете видеть, что разница в том, что:

  • Set не позволяет дублировать значения.
  • Список позволяет дублировать значения.
-1
ответ дан justice 21 August 2018 в 04:21
поделиться

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

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

65
ответ дан Kasun Siyambalapitiya 21 August 2018 в 04:21
поделиться
  • 1
    Я смущен – malhobayyeb 11 January 2017 в 19:38
  • 2
    Упорядочено , когда входные данные расположены точно так, как вводится пользователем, тогда как Sorted - это когда входные данные сортируются лексикографически или восходящим / убывающим (в терминах целочисленных значений) , Unordered означает, что входные данные могут или не могут быть сохранены в введенном пользователем порядке. – Akhil 22 March 2017 в 09:33

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

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

2
ответ дан lavinio 21 August 2018 в 04:21
поделиться
  • 1
    Карты хранят объекты по ключу, но задают объекты хранилища, используя уникальное значение, относящееся к объекту, обычно его хэш-код. (Карты также могут использовать хэш-коды для проверки уникальности ключа, но от них не требуется.) – Quinn Taylor 24 June 2009 в 07:45

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

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

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

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

0
ответ дан Manish Butola 21 August 2018 в 04:21
поделиться

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

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 null null Значение: 1 Значение: 555 Значение: 333 Значение: 888 Значение: 555 Значение: null Значение: null

Set: Set не позволяет дублировать элементы и допускает одиночное значение null. Он не будет поддерживать какой-либо порядок отображения элементов. Только 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");
    }

 }

}

Выход:

приветствие приветствия world java.lang. NullPointerException Set не разрешает нулевое значение и дублирующее значение

2
ответ дан Newbie 21 August 2018 в 04:21
поделиться

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

25
ответ дан Peter 21 August 2018 в 04:21
поделиться

Duplicity

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

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

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

Порядок

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

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

List: ArrayList, LinkedList 
Set: HashSet, LinkedHashSet, TreeSet 
0
ответ дан punitha 21 August 2018 в 04:21
поделиться

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

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

3
ответ дан Rakesh 21 August 2018 в 04:21
поделиться

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

2
ответ дан Ricardo Marimon 21 August 2018 в 04:21
поделиться
  • 1
    Набор ADT не указывает порядок, но некоторые реализации Set (такие как LinkedHashSet) сохраняют порядок вставки. – Michael Myers♦ 23 June 2009 в 21:38
  • 2
    Тем не менее, тем более важным отличием является то, что наборы не позволяют дублировать. Сумка / мультимножество. – Quinn Taylor 23 June 2009 в 21:39
  • 3
    У TreeSet есть заказ. – stackoverflowuser2010 19 October 2013 в 01:26
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
181
ответ дан Sergii Shevchyk 21 August 2018 в 04:21
поделиться

Список

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

Установите

  1. Является неупорядоченной группировкой элементов.
  2. Set используется для сбора элементов без дубликатов.
  3. В интерфейсе Set нет новых методов, поэтому нам нужно использовать Collection интерфейсные методы только с подклассами Set.
10
ответ дан Shankar Suligavi 21 August 2018 в 04:21
поделиться

Список Vs Set

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

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

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

2
ответ дан Siva Kumar 21 August 2018 в 04:21
поделиться

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

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

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

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

0
ответ дан Steve Czetty 21 August 2018 в 04:21
поделиться

Set:

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

. Список:

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

-3
ответ дан user2142109 21 August 2018 в 04:21
поделиться

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

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

1
ответ дан Vibha Sanskrityayan 21 August 2018 в 04:21
поделиться
  • 1
    Привет @Vibha, Если я хочу оба условия? Я имею в виду, что я не хочу, чтобы мои данные содержали дубликаты, и я также хочу, чтобы это был заказ. – Panadol Chong 31 October 2017 в 12:00
8
ответ дан glen3b 31 October 2018 в 23:43
поделиться
65
ответ дан Kasun Siyambalapitiya 31 October 2018 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: