如何用Java創建一個空Map
- java
一、概述
在本文中,我們將探討在 Java 中初始化空Map
的不同可能方式。
我們將使用 Java 8 和 Java 9 來檢查不同的方法。
2. 使用 Java 集合
我們可以使用 Java Collections 模塊提供的emptyMap()
方法創建一個空Map
。這將形成一個本質上可序列化的空Map
。該方法是在 Java 1.5 中的 Collections Library 中引入的。這將創建一個不可變的Map
:
Map<String, String> emptyMap = Collections.emptyMap();
注意:由於創建的Map
本質上是不可變的,因此不允許用戶添加任何條目或對Map
執行任何類型的修改。這將在嘗試添加或修改Map
中的任何鍵值對時拋出java.lang.UnsupportedOperationException
。
我們還有兩個方法支持空Map
的創建和初始化。 emptySortedMap()
返回一個不可變類型的空SortedMap
。 Sorted
Map
是一種在其鍵上提供進一步總排序的映射。此方法創建的Map
本質上是可序列化的:
SortedMap<String, String> sortedMap = Collections.emptySortedMap();
Java Collections 提供的另一個方法是emptyNavigableMap()
,它返回一個空的NavigableMap
。它具有與空排序Map
相同的屬性。唯一的區別是此方法返回一個可導航的Map
。可Navigable
Map
是傳統排序Map
實現的擴展,它返回給定搜索目標的最接近匹配項。
NavigableMap<String, String> navigableMap = Collections.emptyNavigableMap();
以上所有方法都返回本質上不可變的Maps
,我們將無法向這些Maps
添加任何新條目。這會在強制嘗試添加、刪除或修改任何鍵值對時引發UnsupportedOperationException
。
3. 使用構造函數初始化 Map
我們可以使用不同Map
實現的構造函數來初始化Maps
,即HashMap, LinkedHashMap, TreeMap
。所有這些初始化都會創建一個空Map
,如果需要,我們可以在以後添加條目:
Map hashMap = new HashMap();
Map linkedHashMap = new LinkedHashMap();
Map treeMap = new TreeMap();
上面的Maps
是可變的,可以接受新條目,這是使用這種方法的優點之一。在這種類型的初始化過程中創建的Maps
是空的。
4. 使用Map.of()
的 Java 9 方式
Java 9 帶來了許多新特性,例如Interface Private Methods, Anonymous classes, Platform Module System,
等等。 Map.of()
是 Java 9 版本中引入的工廠方法。此方法返回一個創建零映射的不可變Map
。此方法提供的接口屬於 Java Collections Framework。 Map.of(key1, value1, key2, value2, …..)
最多只能有 10 個鍵值對。
為了初始化一個空的Map
,我們不會在這個方法中傳遞任何鍵值對:
Map<String, String> emptyMapUsingJava9 = Map.of();
這個工廠方法產生一個不可變的Map
,因此我們將無法添加、刪除或修改任何鍵值對。初始化後嘗試在Map
中進行任何突變時會引發UnsupportedOperationException
。這。也不支持添加或刪除鍵值對,將導致拋出上述異常。
注意:Java 9 中的Map.of()
方法簡化了具有所需鍵值對的不可變Maps
的初始化。
5. 使用 Java Maps
類
在某些情況下,我們不需要不可變的Map
。我們可以使用Maps
類初始化一個可變Map
:
Map<String, String> emptyMap = Maps.newHashMap();
這種類型的初始化創建了一個可變Map
,即我們可以向這個Map
添加條目。但是這個Map
的基本初始化是空的,不包含任何條目。
我們還可以使用特定的鍵和值類型來初始化Map
。這將創建一個具有預定義元素類型的Map
,如果不遵循則拋出異常:
Map genericEmptyMap = Maps.<String, Integer>newHashMap();
簡而言之,這將創建一個空Map
,其中鍵為字符串,值為整數。用於初始化的一對尖括號稱為Diamond Syntax
。這將使用調用Maps
類的構造函數的已定義類型參數創建一個Map
。
6.使用Guava
到目前為止,我們已經研究了使用核心 Java 初始化空Map
的不同方法。現在讓我們繼續檢查如何使用 Guava 庫初始化Map
:
Map<String, String> articles = ImmutableMap.of();
上述方法將使用 Guava 庫創建一個不可變的空Map
。我們還可以使用以下語法在 guava 中創建可變Map
:
Map<String, String> emptyMapUsingGuava = Maps.newHashMap(ImmutableMap.of());
總之,上述方法在 Java 中創建了一個空Map
。我們可以向這個Map
添加條目,因為它本質上是可變的。
ImmutableMap.of()
還重載了用於創建帶有條目的Maps
的方法版本。由於我們正在創建一個空Map
,我們不需要在方法括號內傳遞任何參數來使用重載方法。
7. 結論
在本文中,我們探索了初始化Empty
Map
的不同方法。我們可以看到,自 Java 9 以來,這個領域有了巨大的進步。我們有了新的工廠方法來創建和初始化Maps
。