1. 概要

この簡単なチュートリアルでは、マップにキーが存在するかどうかを確認する方法を見ていきます。

具体的には、containsKeyget。に焦点を当てます。

2. containsKey

JavaDoc for Map#containsKey を見ると、次のようになります。

戻り値 真実 このマップに指定されたキーのマッピングが含まれている場合

この方法は、私たちがやりたいことを行うためのかなり良い候補であることがわかります。

非常に単純なマップを作成し、その内容をcontainsKeyで確認してみましょう。

@Test
public void whenKeyIsPresent_thenContainsKeyReturnsTrue() {
    Map<String, String> map = Collections.singletonMap("key", "value");
    
    assertTrue(map.containsKey("key"));
    assertFalse(map.containsKey("missing"));
}

簡単に言えば、 containsKey は、マップにそのキーが含まれているかどうかを示します。

3. get

現在、 get も機能する場合がありますが、 Map 実装がnull値をサポートするかどうかによって、手荷物が発生します。

ここでも、 Map のJavaDocを見てください。今回は、 Map#put について、NullPointerExceptionのみがスローされることがわかります。

指定されたキーまたは値がnullであり、このマップがnullキーまたは値を許可しない場合

Map の一部の実装はnull値を持つ可能性があるため( HashMap など)、getnullを返す可能性があります。現在。

したがって、キーに値があるかどうかを確認することが目標である場合、getは機能します。

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

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

ただし、キーが存在することを確認しようとしているだけの場合は、containsKeyを使用する必要があります。

4. 結論

この記事では、containsKeyについて説明しました。 また、キーの存在を確認するためにgetを使用することが危険である理由についても詳しく調べました。

いつものように、Githubでコード例をチェックしてください。