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

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

1. обзор

В этом кратком руководстве мы рассмотрим способы проверить, существует ли ключ вMap.

В частности, мы сосредоточимся наcontainsKey andget.

2. containsKeyс

Если мы посмотрим наthe JavaDoc for Map#containsKey:

Возвращаетtrue, если эта карта содержит отображение для указанного ключа

Мы видим, что этот метод является довольно хорошим кандидатом на то, что мы хотим.

Давайте создадим очень простую карту и проверим ее содержимое с помощьюcontainsKey:

@Test
public void whenKeyIsPresent_thenContainsKeyReturnsTrue() {
    Map map = Collections.singletonMap("key", "value");

    assertTrue(map.containsKey("key"));
    assertFalse(map.containsKey("missing"));
}

Проще говоря,containsKey показывает, содержит ли карта этот ключ.

3. getс

Теперь сканированиеget тоже иногда работает, но оно имеет некоторый багаж, в зависимости от того, поддерживает ли реализацияMap нулевые значения.

Опять же, взглянув на JavaDocMap, на этот раз дляMap#put, мы видим, что он выдаст толькоNullPointerException:

если указанный ключ или значение равно нулюand this map does not permit null keys or values

Поскольку некоторые реализации сканированияMap имеют нулевые значения (например,HashMap),get может возвращатьnull даже при наличии ключа.

Итак, если наша цель - увидеть, имеет ли ключ значение или нет, тоget будет работать:

@Test
public void whenKeyHasNullValue_thenGetStillWorks() {
    Map map = Collections.singletonMap("nothing", null);

    assertTrue(map.containsKey("nothing"));
    assertNull(map.get("nothing"));
}

Но если мы просто пытаемся проверить, существует ли ключ, мы должны придерживатьсяcontainsKey.

4. Заключение

В этой статье мы рассмотрелиcontainsKey. Мы также более подробно рассмотрели, почему использоватьget для проверки существования ключа рискованно.

Как всегда, посмотрите примеры кодаover on Github.