一、概述
在本文中,我们将探讨在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. 使用JavaMaps
类
在某些情况下,我们不需要不可变的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
。
0 评论