如何直接初始化一个HashMap(以字面的方式)?
这个问题在这里已经有了答案:
不,您将不得不手动添加所有元素。 你可以使用一个静态初始化器:
public class Demo
{
private static final Map<String, String> myMap;
static
{
myMap = new HashMap<String, String>();
myMap.put("a", "b");
myMap.put("c", "d");
}
}
请注意,使用函数进行初始化将执行相同的操作,但可能会提高代码的可读性:
public class Demo
{
private static final Map<String, String> myMap = createMap();
private static Map<String, String> createMap()
{
Map<String,String> myMap = new HashMap<String,String>();
myMap.put("a", "b");
myMap.put("c", "d");
return myMap;
}
}
Java 9
在Java 9中,添加了一些工厂方法,也可以用来简化地图的创建:
public class Demo {
private static final Map<String, String> test = Map.of("a", "b", "c", "d");
private static final Map<String, String> test2 = Map.ofEntries(
entry("a", "b"),
entry("c", "d")
);
}
在上面的例子中, test
和test2
都是一样的,只是用不同的方式来表达Map。 Map.of
方法在地图中最多可以定义10个元素,而Map.ofEntries
方法则没有此限制。
请注意,在这种情况下,生成的地图将是不可变的地图。 如果你想要地图是可变的,你可以复制它,例如使用mutableMap = new HashMap<>(Map.of("a", "b"));
(另见JEP 269和Javadoc)
这是一种方法。
HashMap<String, String> h = new HashMap<String, String>() {{
put("a","b");
}};
但是,您应该小心并确保您了解上述代码(它会创建一个从HashMap继承的新类)。 因此,您应该在这里阅读更多内容:http://www.c2.com/cgi/wiki?DoubleBraceInitialization,或者简单地使用Guava:
Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);
如果您允许使用第三方库,您可以使用Guava的ImmutableMap来实现类似文字的简洁性:
Map<String, String> test = ImmutableMap.of("k1", "v1", "k2", "v2");
这适用于最多5个键/值对,否则您可以使用其构建器:
Map<String, String> test = ImmutableMap.<String, String>builder()
.put("k1", "v1")
.put("k2", "v2")
...
.build();
上一篇: How to directly initialize a HashMap (in a literal way)?