11個以上のkey-valueをmapに入れる方法

2023/02/21に公開

JavaのMap.of()メソッドに要素を追加しようとした際にエラーが発生したため、備忘録としてまとめようと思います。

Java9からMap.of()メソッドを利用することで変更不可なマップを直接生成できるようになりました。このメソッドは最大で10個の要素を設定することができます。

したがって以下のように11個目を追加しようとするとエラーが発生します。

Sample.java
public class Sample {
    public static void main(String[] args) {
        var map = Map.of(
                "key1", 1,
                "key2", 2,
                "key3", 3,
                "key4", 4,
                "key5", 5,
                "key6", 6,
                "key7", 7,
                "key8", 8,
                "key9", 9,
                "key10", 10,
		"key11", 11
        );
    }
}

上記のようにMapに11個key-valueを設定したい場合2つ選択肢があります。

1つ目は、同じくJava9で追加されたMap.ofEntries()を使うことで解決できます。

Sample.java
public class Sample {
    public static void main(String[] args) {
        var map = Map.ofEntries(
                Map.entry("key1", 1),
                Map.entry("key2", 2),
                Map.entry("key3", 3),
                Map.entry("key4", 4),
                Map.entry("key5", 5),
                Map.entry("key6", 6),
                Map.entry("key7", 7),
                Map.entry("key8", 8),
                Map.entry("key9", 9),
                Map.entry("key10", 10),
                Map.entry("key11", 11)
        );
    }
}

Map.ofEntries()内でentryを指定することで変更不可なマップを生成することができます。

もう1つは、HashMapを使う方法です。

Sample.java
public class Sample {
    public static void main(String[] args) {
        var map = new HashMap<String, Integer>();
        map.put("key1", 1);
        map.put("key2", 2);
        map.put("key3", 3);
        map.put("key4", 4);
        map.put("key5", 5);
        map.put("key6", 6);
        map.put("key7", 7);
        map.put("key8", 8);
        map.put("key9", 9);
        map.put("key10", 10);
        map.put("key11", 11);
    }
}

HashMapは可変長のエントリーを持ち、制限がないためどんな数のMapも生成できますが、外部で変更を加えられるリスクも有るため、その時々で使い分けて利用するのが良さそうです。

Discussion