Что такое Map в Java и каковы его основные реализации?

«Что такое Map в Java и каковы его основные реализации?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

java.util.Map<K, V> — интерфейс коллекции, хранящей пары ключ-значение. Ключи уникальны, каждому ключу соответствует ровно одно значение.

Основные реализации и их особенности:

Реализация Порядок итерации Временная сложность (get/put) Особенности
HashMap Не гарантирован O(1) в среднем Наиболее распространённая. Использует хэш-таблицу. Допускает null ключ и значения. Не потокобезопасна.
LinkedHashMap По порядку добавления (или порядку доступа) O(1) Расширяет HashMap, сохраняя порядок элементов через двусвязный список. Полезно для LRU-кэшей.
TreeMap По отсортированному порядку ключей O(log n) Реализует NavigableMap. Ключи сортируются по их натуральному порядку (Comparable) или переданному Comparator.
ConcurrentHashMap Не гарантирован O(1) в среднем Потокобезопасная реализация для многопоточных сред. Высокая производительность за счёт блокировок на уровне сегментов/бакетов.

Пример использования HashMap:

Map<String, Integer> fruitBasket = new HashMap<>();
// Добавление пар
fruitBasket.put("apples", 5);
fruitBasket.put("oranges", 3);
// Получение значения по ключу
Integer appleCount = fruitBasket.get("apples"); // 5
// Проверка наличия ключа
boolean hasBananas = fruitBasket.containsKey("bananas"); // false
// Итерация по записям
for (Map.Entry<String, Integer> entry : fruitBasket.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

Типичные сценарии: кэширование, подсчёт частоты элементов, хранение конфигураций, реализация словарей.