如何直接初始化一个HashMap(以文字方式)?

问题:

有没有一些初始化Java HashMap的方式呢?

Map<String,String> test = 
    new HashMap<String, String>{"test":"test","test":"test"};

什么是正确的语法?我没有发现任何事情。这可能吗?我正在寻找在地图中放置一些“最终/静态”值的最短/精确的方法,这些值永远不会改变,并且在创建地图时提前知道。

回答:

不,您将必须手动添加所有元素。您可以使用静态初始化程序:

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")
    );
}

在上面的示例中,testtest2将是相同的,只是使用不同的方式来表达地图。 Map.of方法在地图中最多定义十个元素,而Map.ofEntries方法将不会有这样的限制。
请注意,在这种情况下,生成的地图将是不可变的地图。如果您希望地图是可变的,您可以再次复制地图。使用mutableMap = new HashMap<>(Map.of("a", "b"));
(另见JEP 269Javadoc

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to directly initialize a HashMap (in a literal way)?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

78 + = 82