キーがマップに存在するかどうかを確認する方法
1. 概要
この簡単なチュートリアルでは、キーがMapに存在するかどうかを確認する方法を見ていきます。
具体的には、containsKey とget.に焦点を当てます
2. 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 canも機能することがありますが、Mapの実装がnull値をサポートしているかどうかに応じて、手荷物が発生します。
繰り返しになりますが、MapのJavaDocを見てみましょう。今回は、Map#putについて、NullPointerExceptionのみがスローされることがわかります。
指定されたキーまたは値がnullの場合and this map does not permit null keys or values
Map canの一部の実装にはnull値(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をチェックしてください。