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.of
と Map.ofEntries
の比較について説明します。
Map.ofとMap.ofEntriesの比較
Javaの Map.of
と Map.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.of
と Map.ofEntries
の主な違いとなります。どちらのメソッドを使用するかは、作成するマップの要素数や、コードの可読性などの観点から選択します。不変のマップを効率的に作成するために、これらのメソッドを適切に使い分けることが重要です。