Временная сложность основных операций (get, put, remove, containsKey) в HashMap в среднем составляет O(1).
Это достигается за счет использования хэш-таблицы, где элементы хранятся в ячейках (бакетах), определяемых хэш-кодом ключа. В идеальном случае каждый бакет содержит один элемент.
Однако, в худшем случае, когда все ключи имеют одинаковый хэш-код, или происходит много коллизий, элементы попадают в один и тот же бакет. В этом случае бакет может превратиться в связанный список (до Java 8) или дерево (Java 8 и выше, если количество элементов в бакете превышает определенный порог). Операции над таким бакетом будут иметь временную сложность O(n), где n — количество элементов в этом бакете.
HashMap не гарантирует постоянную временную сложность O(1) при выборке элемента. Гарантируется лишь средняя временная сложность O(1). В худшем случае сложность может быть O(n).
Факторы, влияющие на временную сложность:
load factor (коэффициент загрузки): Определяет, насколько заполненной может быть хэш-таблица до того, как произойдет увеличение ее размера (рехеширование). Высокий load factor может увеличить вероятность коллизий.