Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
マップ.remove() / containsKey() / containsValue() / size()
マップから要素を削除したり、指定したキーや値が存在するかどうかを確認したり、マップの要素数や空かどうかを調べたりするメソッドです。マップの状態管理に使われる基本操作です。
構文
// 指定したキーのエントリを削除します。 マップ.remove(Object key); // キーと値の両方が一致する場合のみ削除します(Java 8 以降)。 マップ.remove(Object key, Object value); // 指定したキーが存在するかどうかを返します。 マップ.containsKey(Object key); // 指定した値が存在するかどうかを返します。 マップ.containsValue(Object value); // マップの要素数を返します。 マップ.size(); // マップが空かどうかを返します。 マップ.isEmpty();
メソッド一覧
| メソッド | 概要 |
|---|---|
| remove(Object key) | 指定したキーに対応するエントリを削除し、削除した値を返します。キーが存在しない場合は null を返します。 |
| remove(Object key, Object value) | キーと値の両方が一致する場合のみ削除します。削除できた場合は true を返します。 |
| containsKey(Object key) | 指定したキーがマップに存在する場合は true を返します。 |
| containsValue(Object value) | 指定した値がマップに存在する場合は true を返します。O(n)の線形探索になります。 |
| size() | マップに含まれるキーと値のペアの数を返します。 |
| isEmpty() | マップが空(要素数が0)の場合は true を返します。 |
サンプルコード
import java.util.HashMap;
HashMap<String, Integer> map = new HashMap<>();
map.put("Alice", 85);
map.put("Bob", 92);
map.put("Carol", 78);
// containsKey() でキーの存在を確認します。
System.out.println(map.containsKey("Alice")); // 『true』と出力されます。
System.out.println(map.containsKey("Dave")); // 『false』と出力されます。
// containsValue() で値の存在を確認します。
System.out.println(map.containsValue(92)); // 『true』と出力されます。
System.out.println(map.containsValue(50)); // 『false』と出力されます。
// size() でエントリ数を確認します。
System.out.println(map.size()); // 『3』と出力されます。
// isEmpty() で空かどうかを確認します。
System.out.println(map.isEmpty()); // 『false』と出力されます。
// remove() でキーを指定して削除します。
Integer removed = map.remove("Bob");
System.out.println(removed); // 削除された値『92』と出力されます。
System.out.println(map.size()); // 『2』と出力されます。
// remove(key, value) で条件付き削除します。
boolean result = map.remove("Alice", 100); // 値が一致しないため削除されません。
System.out.println(result); // 『false』と出力されます。
System.out.println(map.containsKey("Alice")); // 『true』と出力されます(残っています)。
boolean result2 = map.remove("Alice", 85); // 値が一致するため削除されます。
System.out.println(result2); // 『true』と出力されます。
概要
『containsKey()』はハッシュ値を使って検索するためO(1)で高速ですが、『containsValue()』はすべてのエントリを順に調べるためO(n)になります。値の検索を頻繁に行う場合は、値をキーとした逆引きマップを別途用意するか、HashSet に値を保持するなどの工夫を検討してください。
2引数の『remove(key, value)』はアトミックな条件付き削除が必要な場合に便利です。特に ConcurrentHashMap をマルチスレッドで使う場合に安全に利用できます。
マップの作成・追加・取得には『put() / get()』、キー・値の一覧取得には『keySet() / values() / entrySet()』を使用してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。