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

这个问题在这里已经有了答案:

  • 我怎样才能初始化一个静态地图? 40个答案

  • 不,您将不得不手动添加所有元素。 你可以使用一个静态初始化器:

    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。 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();
    


  • 请注意,Guava的ImmutableMap实现不同于Java的HashMap实现(最显着的是它是不可变的并且不允许null键/值)
  • 欲了解更多信息,请参阅Guava关于其不可变集合类型的用户指南文章
  • 链接地址: http://www.djcxy.com/p/2965.html

    上一篇: How to directly initialize a HashMap (in a literal way)?

    下一篇: How to remove items from a list while iterating?