Map

Базовый Java
≈ 2 мин чтения

Значение по ключу

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.