Map とは
Map
とは、java.util.Map というインターフェイスで、Java でキーと値をセットにして扱いたい時に使うデータ構造です。
Mapインターフェース
を用いることで、HashMap
やLinkedHashMap
といったデータ構造を統一的に取り扱えます。
本記事では HashMap クラスの使い方について書きます。
Map インターフェースの使い方
Map インターフェースを実装するクラスを自作するか、HashMap
やLinkedHashMap
のような実装クラスを用います。
Map には同一のキーを複数登録出来ず、各キーは 1 つの値にしかマッピングできません。
HashMap クラスの特徴
■ キーの順序は保証されない
■ キーの重複は許容されていない
■ 値の重複は可能
宣言方法
HashMapクラスの宣言は以下のように記述します。
型推論により右辺のデータ型は省略出来ます
値には List、Set、Mapを持たせることができ、キーにはクラスを指定することも可能です。
Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();
Map<String, List> map = new HashMap<>(); // 値にListを指定
Map<String, Set> map = new HashMap<>(); // 値にSetを指定
Map<String, Map<Integer, Object>> map = new HashMap<>(); // 値にMapを指定
Map<Example>, List> map = new HashMap<>(); // キーにExampleというクラスを指定
使い方
キーを指定して値を追加する(put メソッド)
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
}
}
既にキーがマッピングされている場合には上書きされ、マッピングが無い場合には”null”を返します。
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("dog", "猫");
System.out.println(animal.get("dog")); //猫
System.out.println(animal.get("pig")); //null
}
}
キーを指定して値を取得する(get メソッド)
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
System.out.println(animal.get("cat")); //猫
}
}
キーと値をすべて取得する(keySet メソッド)
keySetメソッドを使用すると、Mapのキーを全て取得することが出来ます。
keySetメソッドは MapのキーをSet型で返すので、拡張for文を使って以下のように繰り返すことで全てのキーを取得できます。
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
for (String pet : animal.keySet()) {
System.out.println(pet);// monkey dog cat
}
}
}
値をすべて取得する(values メソッド)
valuesメソッドを使用すると、Mapの値を全て取得することが出来ます。
valuesメソッドもMapのキーをSet型で返すので、拡張for文を使えばkeySetメソッドのように全ての値を取得できます。
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
for (String pet : animal.values()) {
System.out.println(pet);// 猿 犬 猫
}
}
}
要素数を取得する(size メソッド)
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
System.out.println(animal.size()); // 3
}
}
###指定のキーがあるか真偽値を返す(containsKeyメソッド)
Map の中に特定のキーが含まれているかどうかは、containsKey メソッドを使って判断します。
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
if (animal.containsKey("dog")) { // true
System.out.println("犬が含まれています"); // 犬が含まれています
}
}
}
指定の値があるか真偽値を返す(containsValue メソッド)
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
if (animal.containsValue("猿")) { // true
System.out.println("monkeyが含まれています"); // monkeyが含まれています
}
}
}
中身が空か真偽値を返す(isEmpty メソッド)
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
animal.clear();
if (animal.isEmpty()) { // true
System.out.println("空です"); // 空です
}
}
}
要素を順番に処理する(forEach メソッド)
public class Sample {
public static void main(String[] args) {
Map<String,String> animal = new HashMap<>();
animal.put("monkey", "猿");
animal.put("dog", "犬");
animal.put("cat", "猫");
animal.forEach((key,value) -> System.out.println(key + " " + value)));
//monkey 猿
//dog 犬
//cat 猫
}
}
#参照