Java HashMap

Java 集合框架Java コレクションフレームワーク

HashMap はハッシュテーブルであり、格納する内容はキーと値のペア(key-value)のマッピングです。

HashMap は Map インターフェースを実装し、キーの HashCode 値に基づいてデータを格納します。アクセス速度が非常に速く、最大で1つのレコードのキーに null を許可しますが、スレッド同期はサポートしていません。

HashMap は順序付けされておらず、つまり挿入の順序は記録されません。

HashMap は AbstractMap を継承し、Map、Cloneable、java.io.Serializable インターフェースを実装しています。

HashMap の key と value の型は同じでも異なっていてもかまいません。文字列(String)型の key と value にすることもできますし、整数(Integer)型の key と文字列(String)型の value にすることもできます。

HashMap 内の要素は実際にはオブジェクトであり、いくつかの一般的な基本型はそのラッパークラスを使用できます。

基本型に対応するラッパークラスの表は次のとおりです:

基本型参照型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

HashMap クラスは java.util パッケージにあります。使用する前にインポートする必要があります。構文形式は次のとおりです:

import java.util.HashMap; // 引入 HashMap 类

次の例では、HashMap オブジェクト Sites を作成します。整数(Integer)型の key と文字列(String)型の value を持ちます:

HashMap<Integer, String> Sites = new HashMap<Integer, String>();

要素の追加

HashMap クラスには便利なメソッドが多数用意されています。キーと値のペア(key-value)を追加するには put() メソッドを使用できます:

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // キーと値のペアを追加
        Sites.put(1, "Google");
        Sites.put(2, "サンプル");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

{1=Google, 2=サンプル, 3=Taobao, 4=Zhihu}

次の例では、文字列(String)型の key と文字列(String)型の value を作成します:

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<String, String> Sites = new HashMap<String, String>();
        // キーと値のペアを追加
        Sites.put("one", "Google");
        Sites.put("two", "サンプル");
        Sites.put("three", "Taobao");
        Sites.put("four", "Zhihu");
        System.out.println(Sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

{four=Zhihu, one=Google, two=サンプル, three=Taobao}

要素へのアクセス

get(key) メソッドを使用して、key に対応する value を取得できます:

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // キーと値のペアを追加
        Sites.put(1, "Google");
        Sites.put(2, "サンプル");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites.get(3));
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

Taobao

要素の削除

remove(key) メソッドを使用して、key に対応するキーと値のペア(key-value)を削除できます:

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // キーと値のペアを追加
        Sites.put(1, "Google");
        Sites.put(2, "サンプル");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.remove(4);
        System.out.println(Sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

{1=Google, 2=サンプル, 3=Taobao}

すべてのキーと値のペア(key-value)を削除するには clear メソッドを使用できます:

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // キーと値のペアを追加
        Sites.put(1, "Google");
        Sites.put(2, "サンプル");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.clear();
        System.out.println(Sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

{}

サイズの計算

HashMap 内の要素数を計算するには、size() メソッドを使用できます:

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // キーと値のペアを追加
        Sites.put(1, "Google");
        Sites.put(2, "サンプル");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites.size());
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

4

HashMap の反復

for-each を使用して HashMap 内の要素を反復処理できます。

key だけを取得したい場合は keySet() メソッドを使用でき、その後 get(key) で対応する value を取得できます。value だけを取得したい場合は values() メソッドを使用できます。

例

// HashMap クラスをインポート
import java.util.HashMap;

public class サンプルTest {
    public static void main(String[] args) {
        // HashMap オブジェクト Sites を作成
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // キーと値のペアを追加
        Sites.put(1, "Google");
        Sites.put(2, "サンプル");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        // key と value を出力
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // すべての value 値を返す
        for(String value: Sites.values()) {
          // 各 value を出力
          System.out.print(value + ", ");
        }
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

key: 1 value: Google
key: 2 value: サンプル
key: 3 value: Taobao
key: 4 value: Zhihu
Google, サンプル, Taobao, Zhihu,

Java HashMap メソッド

hashmap

Java HashMap のよく使われるメソッドの一覧は次のとおりです:

メソッド 説明
clear() hashMap 内のすべてのキー/値ペアを削除する
clone() hashMap のコピーを作成する
isEmpty() hashMap が空かどうかを判定する
size() hashMap 内のキー/値ペアの数を計算する
put() キー/値ペアを hashMap に追加する
putAll() すべてのキー/値ペアを hashMap に追加する
putIfAbsent() hashMap に指定されたキーが存在しない場合、指定されたキー/値ペアを hashMap に挿入します。
remove() hashMap 内の指定されたキー key のマッピング関係を削除する
containsKey() hashMap に指定された key に対応するマッピング関係が存在するかどうかを確認します。
containsValue() hashMap に指定された value に対応するマッピング関係が存在するかどうかを確認します。
replace() hashMap 内の指定された key に対応する value を置き換えます。
replaceAll() hashMap 内のすべてのマッピング関係を、指定された関数が実行した結果に置き換えます。
get() 指定された key に対応する value を取得する
getOrDefault() 指定された key に対応する value を取得します。key が見つからない場合は設定されたデフォルト値を返します。
forEach() hashMap 内の各マッピングに対して指定された操作を実行します。
entrySet() hashMap 内のすべてのマッピング項目のセットビューを返します。
keySet() hashMap 内のすべての key で構成されるセットビューを返します。
values() hashMap 内に存在するすべての value 値を返します。
merge() キーと値のペアを hashMap に追加する
compute() hashMap 内の指定された key の値を再計算する
computeIfAbsent() hashMap 内の指定された key の値を再計算します。この key が存在しない場合は hashMap に追加します。
computeIfPresent() hashMap 内の指定された key の値を再計算します。ただし、その key が hashMap 内に存在することが前提です。

その他の API メソッドは次を参照してください:https://www.example.com/manual/jdk11api/java.base/java/util/HashMap.html

Java 集合框架Java コレクションフレームワーク

その他の拡張