Все темы / Коллекции / HashMap

HashMap

HashMap — это словарь «ключ → значение». Как телефонная книга: по имени (ключ) находишь номер (значение). Вторая по частоте коллекция после ArrayList.

Как это в коде

Map<String, Integer> map = new HashMap<>();
map.put("Аня", 25);        // добавить пару
map.get("Аня");            // 25 — получить по ключу
map.containsKey("Аня");    // true — есть ли ключ
map.size();                // 1 — сколько пар

Запомнить на старте:

Копнуть глубже — обход и полный набор
МетодЧто делаетРезультат
map.containsValue(10)есть ли такое значениеboolean
map.keySet()все ключиSet<K>
map.values()все значенияCollection<V>
map.entrySet()все парыSet<Map.Entry>
map.getOrDefault("x", 0)значение или дефолтV

Перебор всех пар — через entrySet:

for (Map.Entry<String, Integer> e : map.entrySet()) {
  System.out.println(e.getKey() + " = " + e.getValue());
}
Под капотом — для глубокого понимания

Внутри HashMap — массив «корзин» (bucket). Ключ прогоняется через hashCode(), по хешу выбирается корзина, внутри корзины ключи сравниваются через equals(). Поэтому:

  • если положить своим ключом объект без корректных equals/hashCodeget его не найдёт;
  • при коллизиях (много ключей в одну корзину) список внутри корзины при Java 8+ превращается в дерево — поиск O(log n) вместо O(n);
  • порядок ключей не гарантирован — нужен порядок, бери LinkedHashMap или TreeMap.
🎤 Закрыл тему, если можешь объяснить:
• что хранит HashMap и зачем нужны уникальные ключи;
• что вернёт get по несуществующему ключу;
• зачем ключу корректные equals/hashCode (если дошёл до 3-го слоя).
← к теме