言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. マップ.remove() / containsKey() / containsValue() / size()

マップ.remove() / containsKey() / containsValue() / size()

対応: Java 1.2(1998)

マップから要素を削除したり、指定したキーや値が存在するかどうかを確認したり、マップの要素数や空かどうかを調べたりするメソッドです。マップの状態管理に使われる基本操作です。

構文

// 指定したキーのエントリを削除します。
マップ.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 を返します。

サンプルコード

sample_HashmapRemoveContainskey.java
import java.util.HashMap;

class HashmapRemoveContainskey {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("狡噛慎也", 85);
        map.put("常守朱", 92);
        map.put("宜野座伸元", 78);

        // containsKey() でキーの存在を確認します。
        System.out.println(map.containsKey("狡噛慎也")); // 『true』と出力されます。
        System.out.println(map.containsKey("征陸智己"));  // 『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("常守朱");
        System.out.println(removed);  // 削除された値『92』と出力されます。
        System.out.println(map.size()); // 『2』と出力されます。

        // remove(key, value) で条件付き削除します。
        boolean result = map.remove("狡噛慎也", 100); // 値が一致しないため削除されません。
        System.out.println(result);            // 『false』と出力されます。
        System.out.println(map.containsKey("狡噛慎也")); // 『true』と出力されます(残っています)。

        boolean result2 = map.remove("狡噛慎也", 85); // 値が一致するため削除されます。
        System.out.println(result2); // 『true』と出力されます。
    }
}
javac HashmapRemoveContainskey.java
java HashmapRemoveContainskey
true
false
true
false
3
false
92
2
false
true
true

概要

『containsKey()』はハッシュ値を使って検索するためO(1)で高速ですが、『containsValue()』はすべてのエントリを順に調べるためO(n)になります。値の検索を頻繁に行う場合は、値をキーとした逆引きマップを別途用意するか、HashSet に値を保持するなどの工夫を検討してください。

2引数の『remove(key, value)』はアトミックな条件付き削除が必要な場合に便利です。特に ConcurrentHashMap をマルチスレッドで使う場合に安全に利用できます。

マップの作成・追加・取得には『put() / get()』、キー・値の一覧取得には『keySet() / values() / entrySet()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。