一、概述
在本文中,我们将探讨在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 评论