HashMap
HashMap — это словарь «ключ → значение». Как телефонная книга: по имени (ключ) находишь номер (значение). Вторая по частоте коллекция после ArrayList.
Как это в коде
Map<String, Integer> map = new HashMap<>();
map.put("Аня", 25); // добавить пару
map.get("Аня"); // 25 — получить по ключу
map.containsKey("Аня"); // true — есть ли ключ
map.size(); // 1 — сколько пар
Запомнить на старте:
- в
<String, Integer>первое — тип ключа, второе — тип значения; - ключи уникальны:
putс тем же ключом перезапишет значение; getнесуществующего ключа вернётnull, а не ошибку.
Копнуть глубже — обход и полный набор
| Метод | Что делает | Результат |
|---|---|---|
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/hashCode—getего не найдёт; - при коллизиях (много ключей в одну корзину) список внутри корзины при Java 8+ превращается в дерево — поиск O(log n) вместо O(n);
- порядок ключей не гарантирован — нужен порядок, бери
LinkedHashMapилиTreeMap.
🎤 Закрыл тему, если можешь объяснить:
• что хранит HashMap и зачем нужны уникальные ключи;
• что вернёт
• зачем ключу корректные
• что вернёт
get по несуществующему ключу;• зачем ключу корректные
equals/hashCode (если дошёл до 3-го слоя).