Ответ
Временная сложность основных операций (добавление, получение, удаление) в map
в Go имеет следующие характеристики:
В среднем случае:
O(1)
(амортизированное константное время).
Это достигается за счёт использования хеш-таблицы. Ключ хешируется, и по значению хеша определяется «корзина» (bucket), где хранится значение. Это очень быстрая операция.В худшем случае:
O(n)
(линейное время).
Худший случай возникает при большом количестве коллизий, когда множество разных ключей дают одинаковый хеш. В такой ситуации все эти элементы попадают в одну «корзину» и для поиска нужного ключа приходится перебирать их последовательно, как в связанном списке. На практике, благодаря качественным хеш-функциям в Go, такая ситуация крайне маловероятна.
Пример операций:
m := make(map[string]int)
m["key1"] = 10 // Добавление, в среднем O(1)
value := m["key1"] // Получение, в среднем O(1)
delete(m, "key1") // Удаление, в среднем O(1)
Также стоит помнить, что при росте map
может происходить рехеширование (перестройка всей таблицы), что является временной операцией O(n)
, но её стоимость «размазывается» по всем операциям вставки, приводя к амортизированной сложности O(1)
.