Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, есть ли ключ в Map

Короткий ответ

containsKey() проверяет, есть ли ключ:

void main() {
    var stock = Map.of("tea", 5, "cake", 0);
 
    IO.println(stock.containsKey("tea"));
    IO.println(stock.containsKey("coffee"));
}

Результат:

true
false

Значение

containsValue() ищет среди значений. Она просматривает всю Map, поэтому работает медленнее:

void main() {
    var stock = Map.of("tea", 5, "cake", 0);
    IO.println(stock.containsValue(0));
}

Результат:

true

Проверка и получение сразу

Если значение всё равно нужно, получите его и проверьте на null — это один поиск вместо двух:

void main() {
    var emails = Map.of("anna", "anna@site.com");
 
    String email = emails.get("anna");
    if (email != null) {
        IO.println("Send to " + email);
    }
}

Результат:

Send to anna@site.com

Частая ошибка

Проверять наличие ключа через get() != null, когда null может быть значением. HashMap разрешает null, и ключ с таким значением кажется отсутствующим:

void main() {
    var phones = new HashMap<String, String>();
    phones.put("oleg", null);
 
    IO.println(phones.get("oleg") != null);
    IO.println(phones.containsKey("oleg"));
}

Результат:

false
true

Функции из этого ответа

  • Map.containsKey() — Проверяет, есть ли в словаре ключ.
  • Map.get() — Возвращает значение по ключу или `null`.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.