Ответ
Для простого перебора всех элементов (for-in) разницы в производительности нет — оба работают за O(n).
Ключевые различия в эффективности:
| Операция | Array (массив) | Set (множество) | Примечание |
|---|---|---|---|
| Перебор всех элементов | O(n) | O(n) | ✅ Одинаково |
Поиск элемента (contains) |
O(n) | O(1) в среднем | ✅ Set быстрее |
| Вставка в конец | O(1) амортизированно | O(1) в среднем | ✅ Одинаково |
| Вставка в начало | O(n) | O(1) в среднем | ✅ Set быстрее |
| Удаление по значению | O(n) | O(1) в среднем | ✅ Set быстрее |
Примеры:
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let set: Set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// Перебор - одинаково
for element in array { print(element) } // O(n)
for element in set { print(element) } // O(n), но порядок не гарантирован
// Поиск - Set значительно быстрее
array.contains(5) // O(n) - проверяет все элементы
set.contains(5) // O(1) - использует хеш-таблицу
// Проверка уникальности
let hasDuplicates = array.count != Set(array).count // Быстрый способ проверки дубликатов
Критерии выбора:
-
Используйте Array, если:
- Важен порядок элементов
- Нужны дубликаты
- Частый доступ по индексу
- Перебор происходит реже, чем поиск
-
Используйте Set, если:
- Нужна гарантия уникальности
- Частые операции поиска, вставки, удаления
- Порядок не важен
- Нужны операции с множествами (объединение, пересечение)