Шаг 118.
Основы Kotlin.
Списки и множества. Множества. Создание множества

    На этом шаге мы рассмотрим создание и особенности использования множества.

    Список создается с помощью функции listOf(). Создать множество можно с помощью функции setOf(). Попробуйте создать множество в REPL.

  val planets = setOf("Mercury", "Venus", "Earth") 
  planets
 
 [Mercury, Venus, Earth]


Рис.1. Создание множества (REPL)

    Если попробовать добавить в множество одну и ту же планету дважды, в нем останется только одна.

  val planets = setOf("Mercury", "Venus", "Earth", "Earth") 
  planets
 
 [Mercury, Venus, Earth]


Рис.2. Пробуем создать множество с дубликатом (REPL)

    Второе значение "Earth" было выброшено из множества.

    Так же как список, множество позволяет проверить присутствие конкретного элемента с помощью contains() или containsAll(). Попробуйте функцию contains() в REPL.

  planets.contains("Earth")
  true

  planets.contains("Pluto")
  false


Рис.3. Проверка планет (REPL)

    Множество не индексирует свое содержимое - это означает, что оно не поддерживает встроенный оператор [] для доступа к элементам по индексу. Тем не менее можно запросить элемент по определенному индексу с помощью функции, которая использует итерации для решения своей задачи. Чтобы получить доступ к третьей планете в множестве с помощью функции elementAt(), введите в REPL следующее.

  val planets = setOf("Mercury", "Venus", "Earth") 
  planets.elementAt(2)
  
  Earth


Рис.4. Поиск третьей планеты (REPL)

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

    Также множество имеет изменяемую версию (как вы скоро увидите), но не имеет функций-мутаторов, использующих индекс (как функция add(index, element) в типе List).

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

    Именно так мы реализуем список посетителей для таверны.

    На следующем шаге мы рассмотрим добавление элементов в множество.




Предыдущий шаг Содержание Следующий шаг