Map
Значение по ключу
Map<K, V> хранит пары «ключ — значение».
Ключ выступает идентификатором: по нему можно быстро обратиться к связанному значению,
не перебирая позиции как в списке.
Map<String, Integer> scores = new HashMap<>();
scores.put("Ann", 90);
scores.put("Bob", 75);
System.out.println(scores.get("Ann")); // 90
Первый параметр типа — тип ключа, второй — тип значения.
Ключи в карте уникальны: повторный put() с тем же ключом заменяет старое значение.
Значения при этом могут повторяться.
Чтение и проверка
get(key) возвращает значение или null, если подходящей записи нет.
Когда нужен запасной результат, удобно использовать getOrDefault().
Map<String, Integer> attempts = new HashMap<>();
attempts.put("login", 2);
int loginAttempts = attempts.getOrDefault("login", 0);
int paymentAttempts = attempts.getOrDefault("payment", 0);
System.out.println(loginAttempts); // 2
System.out.println(paymentAttempts); // 0
Для отдельной проверки есть containsKey() и containsValue().
На практике поиск по ключу обычно является основной операцией карты.
Обход записей
Карта может предоставить набор ключей, набор значений или набор пар через
keySet(), values() и entrySet().
Если нужны одновременно ключ и значение, удобнее работать с записями.
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Map задаёт общую модель работы с ключами.
Как именно реализация организует быстрый поиск, зависит от конкретного класса — дальше мы отдельно разберём HashMap.