1. Обзор
В этом кратком руководстве мы рассмотрим способы проверки наличия ключа в Карте .
В частности, мы сосредоточимся на containsKey и get.
2. containsKey
Если мы взглянем на JavaDoc для Map#containsKey :
Возвращает true , если эта карта содержит отображение для указанного ключа
Мы видим, что этот метод является довольно хорошим кандидатом для того, чтобы делать то, что мы хотим.
Давайте создадим очень простую карту и проверим ее содержимое с помощью containsKey :
@Test public void whenKeyIsPresent_thenContainsKeyReturnsTrue() { Mapmap = Collections.singletonMap("key", "value"); assertTrue(map.containsKey("key")); assertFalse(map.containsKey("missing")); }
Проще говоря, Содержит говорит нам, содержит ли карта этот ключ.
3. получить
Теперь get иногда тоже может работать, но он поставляется с некоторым багажом, в зависимости от того, поддерживает ли реализация Map нулевые значения.
Опять же, взглянув на JavaDoc Map , на этот раз для Map#put , мы видим, что он только вызовет исключение NullPointerException :
если указанный ключ или значение равно null и эта карта не допускает нулевые ключи или значения
Поскольку некоторые реализации Map могут иметь нулевые значения (например, HashMap ), для get возможно вернуть null , даже если ключ присутствует.
Итак, если наша цель состоит в том, чтобы увидеть, имеет ли ключ значение, то получить будет работать:
@Test public void whenKeyHasNullValue_thenGetStillWorks() { Mapmap = Collections.singletonMap("nothing", null); assertTrue(map.containsKey("nothing")); assertNull(map.get("nothing")); }
Но если мы просто пытаемся проверить, существует ли ключ, то нам следует придерживаться Содержит .
4. Заключение
В этой статье мы рассмотрели containsKey . Мы также более подробно рассмотрели, почему рискованно использовать get для проверки существования ключа.
Как всегда, ознакомьтесь с примерами кода на Github .