木. 1月 23rd, 2025

JavaのMap.ofとは

Java 9以降、java.util.Map インターフェースに Map.of という静的ファクトリーメソッドが追加されました。このメソッドを使用すると、指定したキーと値のペアからなる不変のマップを作成することができます。

以下に基本的な使用例を示します。

Map<String, Integer> map = Map.of("key1", 1, "key2", 2, "key3", 3);

このコードは、キー “key1″、”key2″、”key3” にそれぞれ値 1、2、3 を持つ不変のマップを作成します。

Map.of メソッドは最大10個のキーと値のペアを受け取ることができます。それ以上の要素を持つマップを作成する場合は、Map.ofEntries メソッドを使用します。

不変のマップは、一度作成するとその後変更することができません。したがって、マップの内容が変更されることなく安全に共有できます。これは、マルチスレッド環境でのプログラミングにおいて特に有用です。ただし、不変のマップに対して変更を試みると、UnsupportedOperationException がスローされます。

以上が、Javaの Map.of の基本的な説明となります。次のセクションでは、具体的な使用例を見ていきましょう。

Map.ofの使用例

Javaの Map.of メソッドを使用して不変のマップを作成する基本的な例を以下に示します。

// キーと値のペアからなる不変のマップを作成
Map<String, Integer> map = Map.of("Apple", 1, "Banana", 2, "Cherry", 3);

// マップの内容を出力
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

このコードは、キー “Apple”、”Banana”、”Cherry” にそれぞれ値 1、2、3 を持つ不変のマップを作成し、その内容を出力します。

また、Map.of メソッドを使用して作成した不変のマップに対して変更を試みると、UnsupportedOperationException がスローされることを確認する例を以下に示します。

try {
    // キーと値のペアからなる不変のマップを作成
    Map<String, Integer> map = Map.of("Apple", 1, "Banana", 2, "Cherry", 3);

    // マップに新しいエントリを追加しようとする
    map.put("Orange", 4);
} catch (UnsupportedOperationException e) {
    System.out.println("Cannot modify an immutable map");
}

このコードは、不変のマップに新しいエントリを追加しようとすると、UnsupportedOperationException がスローされ、”Cannot modify an immutable map” というメッセージが出力されます。

以上が、Javaの Map.of メソッドの使用例です。次のセクションでは、Map.ofEntries メソッドについて説明します。

JavaのMap.ofEntriesとは

Java 9以降、java.util.Map インターフェースに Map.ofEntries という静的ファクトリーメソッドが追加されました。このメソッドを使用すると、指定したエントリからなる不変のマップを作成することができます。

Map.ofEntries メソッドは、Map.Entry オブジェクトの可変長引数を受け取ります。Map.Entry オブジェクトは、Map.entry メソッドを使用して作成できます。

以下に基本的な使用例を示します。

Map<String, Integer> map = Map.ofEntries(
    Map.entry("key1", 1),
    Map.entry("key2", 2),
    Map.entry("key3", 3)
);

このコードは、キー “key1″、”key2″、”key3” にそれぞれ値 1、2、3 を持つ不変のマップを作成します。

Map.ofEntries メソッドは、任意の数のエントリを受け取ることができます。したがって、Map.of メソッドが受け取ることができる10個のキーと値のペアを超えるエントリを持つマップを作成する場合に使用します。

以上が、Javaの Map.ofEntries の基本的な説明となります。次のセクションでは、具体的な使用例を見ていきましょう。

Map.ofEntriesの使用例

Javaの Map.ofEntries メソッドを使用して不変のマップを作成する基本的な例を以下に示します。

// エントリからなる不変のマップを作成
Map<String, Integer> map = Map.ofEntries(
    Map.entry("Apple", 1),
    Map.entry("Banana", 2),
    Map.entry("Cherry", 3),
    Map.entry("Date", 4),
    Map.entry("Elderberry", 5)
);

// マップの内容を出力
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

このコードは、キー “Apple”、”Banana”、”Cherry”、”Date”、”Elderberry” にそれぞれ値 1、2、3、4、5 を持つ不変のマップを作成し、その内容を出力します。

また、Map.ofEntries メソッドを使用して作成した不変のマップに対して変更を試みると、UnsupportedOperationException がスローされることを確認する例を以下に示します。

try {
    // エントリからなる不変のマップを作成
    Map<String, Integer> map = Map.ofEntries(
        Map.entry("Apple", 1),
        Map.entry("Banana", 2),
        Map.entry("Cherry", 3)
    );

    // マップに新しいエントリを追加しようとする
    map.put("Orange", 4);
} catch (UnsupportedOperationException e) {
    System.out.println("Cannot modify an immutable map");
}

このコードは、不変のマップに新しいエントリを追加しようとすると、UnsupportedOperationException がスローされ、”Cannot modify an immutable map” というメッセージが出力されます。

以上が、Javaの Map.ofEntries メソッドの使用例です。次のセクションでは、Map.ofMap.ofEntries の比較について説明します。

Map.ofとMap.ofEntriesの比較

Javaの Map.ofMap.ofEntries は、どちらも不変のマップを作成するための静的ファクトリーメソッドですが、使用する場面や使い方が異なります。

キーと値のペアの数

Map.of メソッドは、最大10個のキーと値のペアを受け取ることができます。それ以上の要素を持つマップを作成する場合は、Map.ofEntries メソッドを使用します。

// Map.ofを使用した例
Map<String, Integer> map1 = Map.of("key1", 1, "key2", 2, ..., "key10", 10);

// Map.ofEntriesを使用した例
Map<String, Integer> map2 = Map.ofEntries(
    Map.entry("key1", 1),
    Map.entry("key2", 2),
    ...,
    Map.entry("key11", 11),
    Map.entry("key12", 12)
);

エントリの作成方法

Map.of メソッドは、直接キーと値のペアを引数として受け取ります。一方、Map.ofEntries メソッドは、Map.Entry オブジェクトの可変長引数を受け取ります。Map.Entry オブジェクトは、Map.entry メソッドを使用して作成します。

// Map.ofを使用した例
Map<String, Integer> map1 = Map.of("key1", 1, "key2", 2);

// Map.ofEntriesを使用した例
Map<String, Integer> map2 = Map.ofEntries(
    Map.entry("key1", 1),
    Map.entry("key2", 2)
);

以上が、Javaの Map.ofMap.ofEntries の主な違いとなります。どちらのメソッドを使用するかは、作成するマップの要素数や、コードの可読性などの観点から選択します。不変のマップを効率的に作成するために、これらのメソッドを適切に使い分けることが重要です。

By jakoten

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です