В чем ключевые различия между структурой данных Set и Array?

«В чем ключевые различия между структурой данных Set и Array?» — вопрос из категории Алгоритмы и структуры данных, который задают на 23% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Set (Множество) и Array (Массив) — это фундаментальные коллекции с разными семантиками и характеристиками производительности.

Основные различия

Критерий Set (Множество) Array (Массив)
Уникальность Содержит только уникальные элементы. Дубликаты игнорируются при вставке. Может содержать дубликаты элементов.
Порядок Не гарантирует порядок элементов (в большинстве языков). В Swift порядок не гарантирован, но может сохраняться как побочный эффект реализации. Строго сохраняет порядок вставки элементов. Индексы стабильны (кроме удаления).
Производительность contains() O(1) в среднем. Оптимизирован для быстрого поиска (использует хеш-таблицу). O(n) в худшем случае. Требует линейного перебора.
Доступ по индексу Не поддерживается. O(1) по целочисленному индексу.

Пример на Swift

// Array — дубликаты и порядок сохраняются
let numbersArray = [1, 3, 2, 3, 1]
print(numbersArray) // [1, 3, 2, 3, 1]

// Set — только уникальные значения, порядок не гарантирован
let numbersSet: Set = [1, 3, 2, 3, 1]
print(numbersSet) // Порядок может быть любым, например [2, 3, 1]

// Проверка наличия элемента
print(numbersArray.contains(2)) // O(n) — перебор
print(numbersSet.contains(2))   // O(1) — хеш-поиск

Когда что использовать?

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