Java HashMap
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 内の要素は実際にはオブジェクトであり、いくつかの一般的な基本型はそのラッパークラスを使用できます。
基本型に対応するラッパークラスの表は次のとおりです:
| 基本型 | 参照型 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
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() メソッドを使用できます:
例
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 を作成します:
例
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 を取得できます:
例
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)を削除できます:
例
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 メソッドを使用できます:
例
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() メソッドを使用できます:
例
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() メソッドを使用できます。
例
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 メソッド
hashmapJava 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 コレクションフレームワーク