Ответ
Средняя сложность — O(1), в худшем случае — O(n).
Процесс удаления:
- Вычисление хэша ключа: O(1).
- Определение бакета (корзины): O(1).
- Поиск элемента внутри бакета:
- O(1) — если элементы хранятся в связном списке (при малом количестве коллизий).
- O(log n) — если бакет преобразован в сбалансированное дерево (при большом количестве коллизий, начиная с Java 8).
- Удаление узла: O(1).
Почему возможен худший случай O(n)? При очень плохой хэш-функции все элементы могут попасть в один бакет, превратив HashMap в связный список. Поиск элемента в таком списке будет иметь линейную сложность.
Пример на Java:
import java.util.HashMap;
import java.util.Map;
public class Example {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
// Удаление элемента — в среднем O(1)
Integer removedValue = map.remove("apple");
System.out.println("Removed: " + removedValue); // Removed: 10
}
}
Ключевой момент: Эффективность HashMap напрямую зависит от качества хэш-функции и коэффициента загрузки (load factor).