Java HashMap内联初始化

时间:2020-02-23 14:37:09  来源:igfitidea点击:

下面的示例演示如何使用标准和内联方法初始化Java哈希映射。

为什么需要直接初始化HashMap?

尽管地图广泛用于以动态方式收集和处理数据,但通常我们需要创建一个带有预定义键和值的小地图,以测试我们正在处理的一个简短算法或者概念。手工初始化javahashmap的另一个用例是测试程序或者算法如何使用特定值执行。在编写简短的演示程序时,我们可能更喜欢直接初始化映射,而不是从文件或者某种流中读取数据并用值填充映射。我们可以想象,与一行HashMap初始化相比,我们需要付出多大的努力。

初始化HashMap的强制方式

直接的解决方案是声明一个映射,然后将()项放入映射中。我们将使用此示例作为参考,以与其他更节省类型的技术进行比较。

Map<String,String> mymap = new HashMap<String, String>();
test.put("A","one");
test.put("B","two");

正如我们在上面的示例中看到的,我们首先创建一个map对象并将条目放入其中。这里要提到的另一件重要的事情是,通过使用这些方法,我们可以创建一个动态映射,并且可以编辑、删除或者创建新条目。

使用匿名子类初始化HashMap

这将创建HashMap的一个匿名子类,其实例初始化器将这些值放入其中。换句话说,它创建了一个继承自HashMap的新类。这是创建和初始化动态HashMap的最短方法

Map<Integer, String> mymap = new HashMap<Integer, String>() {
	{
		put(1, "one");
		put(2, "two");
	}
};

初始化不可变映射

与动态映射(如上面的示例所示)相比,不可变映射是不可编辑的。这意味着我们不能将新条目放入其中、删除条目或者更新条目。如果你想测试一个简单的算法,它们会很适合你。

初始化JavaSE8及更早版本的不可变映射

下面的示例演示如何在Java 8或者更早的Java版本中初始化不可变映射:

Map<Integer,String> mymap = new HashMap<>();
mymap.put(1,"one");
mymap.put(2,"two");
mymap.put(3,"three");
Map<Integer,String> immutableMap = Collections.unmodifiableMap(mymap);

如我们所见,我们可以用老式的方式创建和初始化映射。使映射不可变的是调用Collections.unmodifiableMap(地图)。它看起来不像是一个内联初始化。不用担心,下一个例子就可以了。

通过Guava方式内联初始化HashMap

Guava是第一个引入真正的单行map初始化的软件。参见下面的示例

Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);

内联初始化java9方式的HashMap

最后,在Java9中,我们可以使用单行语句初始化不可变的hashmap,而不需要第三方库。

Map<Integer,String> map = Map.of(1, "A", 2, "B", 3, "C");

我们可能想阅读完整的Java9不可变映射示例以了解更多详细信息。