1. 概要

この記事では、Javaで空のMapを初期化するさまざまな方法について説明します。

さまざまな方法を確認するために、Java8とJava9を使用します。

2. Javaコレクションの使用

Javaコレクションモジュールが提供するemptyMap()メソッドを使用して、空のMapを作成できます。 これにより、本質的にシリアル化可能な空のマップが形成されます。 このメソッドは、Java1.5のコレクションライブラリで導入されました。 これにより、不変が作成されます地図

Map<String, String> emptyMap = Collections.emptyMap();

注:作成された Map は本質的に不変であるため、ユーザーはMapにエントリを追加したり変更を加えたりすることはできません。これによりJavaがスローされますマップ内のキーと値のペアを追加または変更しようとしたときの.lang.UnsupportedOperationException。

空のMapの作成と初期化をサポートするメソッドがさらに2つあります。 emptySortedMap()は、不変タイプの空のSortedMapを返します。 Sorted Map は、キーの合計順序をさらに提供するものです。 このメソッドによって作成されたMapは、本質的にシリアル化可能です。

SortedMap<String, String> sortedMap = Collections.emptySortedMap();

Javaコレクションによって提供されるもう1つのメソッドは、空のNavigableMapを返すemptyNavigableMap()です。これは、空のソートされたMapと同じプロパティを持ちます。 このメソッドの唯一の違いは、ナビゲート可能なMapを返します。 Navigable Map は、従来の並べ替えられた Map 実装の拡張であり、特定の検索ターゲットに最も近い一致を返します。

NavigableMap<String, String> navigableMap = Collections.emptyNavigableMap();

上記のすべてのメソッドは、本質的に不変の Maps を返し、これらのMapsに新しいエントリを追加することはできません。 これにより、キーと値のペアを強制的に追加、削除、または変更しようとすると、UnsupportedOperationExceptionがスローされます。

3. Java Mapsクラスの使用

場合によっては、不変のMapは必要ありません。 Maps クラスを使用して、変更可能なMapを初期化できます。

Map<String, String> emptyMap = Maps.newHashMap();

このタイプの初期化は、可変マップを作成します。 このマップにエントリを追加できます。 しかし、これの基本的な初期化地図空であり、エントリは含まれていません。

Mapを特定のキーと値のタイプで初期化することもできます。 これにより、事前定義された要素タイプを持つ Map が作成され、従わない場合は例外がスローされます。

Map genericEmptyMap = Maps.<String, Integer>newHashMap();

つまり、これにより、キーが文字列、値が整数の空のMapが作成されます。 初期化に使用される山括弧のペアは、Diamond構文と呼ばれます。これにより、Mapsのコンストラクターを呼び出す定義済みの型引数を使用してMapが作成されます。クラス。

4. コンストラクターを使用したマップの初期化

さまざまなMap実装のコンストラクターを使用して、Mapsを初期化できます。 HashMap、LinkedHashMap、TreeMap。 これらの初期化はすべて、空の Map を作成し、必要に応じて後でエントリを追加できます。

Map hashMap = new HashMap();
Map linkedHashMap = new LinkedHashMap();
Map treeMap = new TreeMap();

上記のマップは変更可能であり、このアプローチを使用する利点の1つである新しいエントリを受け入れることができます。このタイプの初期化中に作成されたマップは空です。 コードの静的ブロック空のマップを定義できます。

5. Java 9 Way With Map.of()

Java 9には、インターフェイスプライベートメソッド、匿名クラス、プラットフォームモジュールシステム、などの多くの新機能が付属しています。 Map.of()は、Java 9バージョンで導入されたファクトリメソッドです。このメソッドは、ゼロマッピングを作成する不変のMapを返します。 このメソッドによって提供されるインターフェースは、Javaコレクションフレームワークの下にあります。 Map.of(key1、value1、key2、value2、…..)は、最大10個のキーと値のペアのみを持つことができます。

空のMapを初期化するために、このメソッドではキーと値のペアを渡しません。

Map<String, String> emptyMapUsingJava9 = Map.of();

このファクトリメソッドは不変のMapを生成するため、キーと値のペアを追加、削除、または変更することはできません。 初期化後にMapに変更を加えようとすると、UnsupportedOperationExceptionがスローされます。 。 キーと値のペアの追加または削除もサポートされておらず、上記の例外がスローされます。

注:Java 9Map.of()メソッドは、必要なキーと値のペアを使用した不変のMapsの初期化を簡素化します

6. グアバの使用

これまで、コアJavaを使用して空のMapを初期化するさまざまな方法を検討してきました。 ここで先に進み、Guavaライブラリを使用してMapを初期化する方法を確認しましょう。

Map<String, String> articles = ImmutableMap.of();

上記のメソッドは、Guavaライブラリを使用して不変の空のマップを作成します。次の構文を使用して、guavaに変更可能なMapを作成することもできます。

Map<String, String> emptyMapUsingGuava = Maps.newHashMap(ImmutableMap.of());

結論として、上記のメソッドはJavaで空のMapを作成します。 このMapは本質的に変更可能であるため、エントリを追加できます。

ImmutableMap.of()は、エントリを含むMapsを作成するためのメソッドバージョンもオーバーロードしました。 空のMapを作成しているため、オーバーロードされたメソッドを使用するために、メソッドの括弧内にパラメーターを渡す必要はありません。

7. 結論

この記事では、 Empty Mapを初期化するさまざまな方法について説明しました。 Java 9以降、この分野で大幅な改善が見られます。 マップを作成および初期化するための新しいファクトリメソッドがあります。

いつものように、完全なソースコードはGithub利用できます。