Как проверить, есть ли ключ в 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`.