概述

本文将探讨在Java中初始化空Map的不同方法。我们将使用Java 8和Java 9来展示这些不同的方式。

2. 使用Java集合库

我们可以使用Java集合库提供的emptyMap()方法创建一个空的Map这将生成一个可序列化的空Map。该方法在Java 1.5的Collections库中引入。这将创建一个不可变的Map

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

注意:由于创建的Map是不可变的,用户无法向其中添加任何条目或对Map进行任何类型的修改。尝试在Map中添加或修改任何键值对时,它会抛出java.lang.UnsupportedOperationException

我们还有另外两个方法支持空Map的创建和初始化。**emptySortedMap()返回一个不可变的空SortedMap。**SortedMap是一种提供其键进一步总排序的Map。这个方法创建的Map也是可序列化的:

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

Java集合库提供的另一个方法是emptyNavigableMap(),它返回一个空的NavigableMap它的属性与空排序Map相同。唯一的区别是此方法返回一个可导航的MapNavigableMap是传统排序Map实现的扩展,可以为给定搜索目标找到最接近的匹配。

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

上述所有方法返回的Map都是不可变的,我们无法向这些Map添加新条目。尝试强制添加、删除或修改任何键值对时,它们会抛出UnsupportedOperationException

3. 使用构造函数初始化Map

我们可以使用不同Map实现的构造函数(如HashMapLinkedHashMapTreeMap)初始化Map。所有这些初始化都会创建一个空的Map,如果需要,我们可以在稍后添加条目:

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

上述Map是可变的,可以接受新的条目,这是使用这种方法的一个优点。这种初始化类型创建的Map是空的。我们可以在代码的静态块中定义Map

4. Java 9中的新方法: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 9的Map.of()方法简化了使用所需键值对初始化不可变Map的过程。

5. 使用Guava库

到目前为止,我们已经了解了使用核心Java初始化空Map的不同方法。现在让我们看看如何使用Guava库初始化Map

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

以上方法使用Guava库创建了一个不可变的空Map

在某些情况下,我们不需要不可变Map。我们可以使用Maps类初始化一个可变的Map

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

这种初始化方式创建了一个可变的Map,即我们可以向其中添加条目。但是,Map的基本初始化是空的,不包含任何条目。

我们还可以根据特定的键和值类型初始化Map。这将创建具有预定义元素类型的Map,如果不遵循,将抛出异常:

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

简而言之,这将创建一个键为字符串、值为整数的空Map用于初始化的角括号语法称为 Diamond Syntax这将创建具有定义的类型参数的Map,并调用Maps类的构造函数。

我们也可以使用以下语法在Guava中创建可变的Map

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

总之,上述方法在Java中创建了一个空Map。由于它是可变的,我们可以向其中添加条目。

ImmutableMap.of()也有用于创建带有条目的Map的重载方法。由于我们正在创建一个空Map,我们不需要在方法括号内传递任何参数来使用重载方法。

7. 结论

在这篇文章中,我们探讨了初始化空Map的不同方法。自Java 9以来,这个领域有了显著的进步。我们有了创建和初始化Map的新工厂方法

一如既往,完整的源代码可在GitHub上获取。