1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

不変マップを初期化する際はMap.ofEntriesを推奨

Last updated at Posted at 2023-01-10

不変マップの初期化方法

不変マップの初期化方法は大きく下記2つの方法があります。

  • Map.of()
  • Map.ofEntries()

いずれもJavaSE9、JDK9以降に導入された機能になります。
https://docs.oracle.com/javase/jp/9/docs/api/java/util/Map.html

それではそれぞれの使い方を見ていきましょう。

Map.of()

下記ドキュメントを参照しますと分かるとおり、of()の引数は、0〜10個の要素(キーとバリューのマッピング)を指定することができます。
image.png

例えば、要素数が2つの不変マップを初期化する場合

import java.util.Map;

Map<String, String> mapOf = Map.of(
    "key1", "value1",
    "key2", "value2"
);

Map.of()はキーとバリューを交互に指定していきます。

要素が1個とか2個のときはどれがキーでどれがバリューか分かりやすいですが、要素数が増えてくるとちょっと分かりにくくなりそうですね。

実際は、キーとバリューの名前がプログラム例のように『keyXX』とか『valueXX』とか分かりやすく命名されているはずもないので。

Map.ofEntries()

image.png

Map.ofEntries()は指定したエントリから抽出されたキーと値を含む不変マップを作成します。

import java.util.Map;
import static java.util.Map.entry;

Map<String, String> mapOfEntries = Map.ofEntries(
    entry("key1", "value1"),
    entry("key2", "value2")
);

要素ごとにentry("key", "value")を指定します。

Map.ofEntries()は指定できる要素数に制限はないため、要素数が増えても簡単に要素追加できますし、entry()で区切られているためキーとバリューのマッピングが一見して分かりやすいです。

Map.ofEntries()を推奨する理由

ここまでMap.of()Map.ofEntries()をそれぞれ見てきました。

最後にMap.ofEntries()を推奨する理由をまとめていきます!

可変性

Map.of()は最大10個の要素しか指定できず、11個以上の要素を指定できないという可変性の低さがあります。
そのため11個以上に要素が増える可能性がある場合は使用を避けるべきです。
その点、Map.ofEntries()は、要素数の制限はないため、要素数が増えても簡単に追加することができます。

可読性

先述したとおり、Map.of()はKeyとValueを交互に指定していきます。
要素が1個とか2個のときはどれがキーでどれがバリューか分かりやすいですが、要素数が増えていくと最大20個の要素が横並びすることになり、可読性を著しく損ないます。(IDEやエディタのコードフォーマットをしたら少しは見やすくなりますが)

一方でMap.ofEntries()は要素数の制限はなく、要素1つを指定する毎にentry(key, value)を指定するため、下記のように要素数が増えても簡単に要素追加できますし、キーとバリューの組み合わせが分かりやすいです。

import java.util.Map;
import static java.util.Map.entry;

Map<String, String> mapOfEntries = Map.ofEntries(
    entry("1", "1"),
    entry("2", "2"),
    entry("3", "3"),
    entry("4", "4"),
    entry("5", "5"),
    entry("6", "6"),
    entry("7", "7"),
    entry("8", "8"),
    entry("9", "9"),
    entry("10", "10"),
    entry("11", "11")
);
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?