Ответ
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).