Как сравнивается производительность Array, Set и Dictionary в Swift?

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

Ответ

Производительность Array, Set и Dictionary в Swift зависит от конкретной операции. Основные отличия связаны с их внутренней структурой данных.

Сравнение по операциям (Big O нотация):

Операция Array Set Dictionary
Поиск элемента O(n) (линейный поиск) O(1) в среднем (хеш-таблица) O(1) в среднем (поиск по ключу)
Вставка в конец O(1) в среднем - -
Вставка в середину O(n) O(1) в среднем O(1) в среднем
Удаление O(n) (если не с конца) O(1) в среднем O(1) в среднем

Примеры:

// Поиск
let array = [1, 2, 3, 4]
array.contains(3) // O(n) - проходит по всем элементам

let set: Set = [1, 2, 3, 4]
set.contains(3) // O(1) - использует хеш для прямого доступа

let dict = [1: "a", 2: "b"]
dict[1] // O(1) - поиск значения по ключу

Рекомендации по выбору:

  • Array: Когда важен порядок элементов или частый доступ по индексу.
  • Set: Когда нужна гарантия уникальности элементов и быстрый поиск/проверка на вхождение.
  • Dictionary: Когда данные логически организованы как пары «ключ-значение» и нужен быстрый доступ по ключу.