美文网首页技术干货Java
【Java必修课】如何创建和初始化一个HashMap?

【Java必修课】如何创建和初始化一个HashMap?

作者: 南瓜慢说 | 来源:发表于2019-10-09 23:29 被阅读0次

    如何创建和初始化一个HashMap,看似简单的问题,其实真的挺简单的,但我们希望从多种方法中,选择一个最简洁方便、可读性也高的方法。

    代码块初始化

    可以使用静态代码块和非静态代码块,都可以进行初始化,要针对变量是否是静态变量来选择。

    private static Map<String, String> map;
    {
        map = new HashMap<>();
        map.put("name", "pumpkin");
        map.put("location", "Guangzhou");
    }
    

    双大括号初始化

    Map<String, String> map = new HashMap<String, String>() {{
        put("name", "pumpkin");
        put("sex", "M");
    }};
    assertEquals("pumpkin", map.get("name"));
    

    虽然这是一种可行的办法,但并不认可这种方法,具体原因可阅读之前的文章。

    使用Java集合工具类Collections

    ap = Collections.emptyMap();
    map = Collections.singletonMap("name", "pumpkin");
    assertEquals("pumpkin", map.get("name"));
    

    需要注意的是,这产生的是不可变的Map。

    使用Java 8 Stream的方法

    map = Stream.of(
            new AbstractMap.SimpleEntry<>("name", "Pumpkin"),
            new AbstractMap.SimpleEntry<>("age", "18"))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    assertEquals("Pumpkin", map.get("name"));
    

    也可以用Stream生成不可变的Map,如下:

    map = Stream.of(
            new AbstractMap.SimpleEntry<>("name", "Pumpkin"),
            new AbstractMap.SimpleEntry<>("age", "18"))
            .collect(Collectors.collectingAndThen(
                    Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue),
                    Collections::unmodifiableMap
            ));
    

    使用Guava库

    Guava库应该大多数Java开发都知道,它是Google开源的类库,里面有许多非常方便的工具与类。

    map = ImmutableMap.of("key1", "value1", "key2", "value2");
    map = Maps.newHashMap(map);
    

    以上两行代码分别生成不可变的Map和可变的Map。

    总结

    本文介绍了生成空的Map,只有一个Entry的Map;可变的Map和不可变的Map。大家可根据自己的需求自行选择。

    Java 9对这块有比较大的改进,有兴趣的同学就自行研究吧。

    相关文章

      网友评论

        本文标题:【Java必修课】如何创建和初始化一个HashMap?

        本文链接:https://www.haomeiwen.com/subject/jubnpctx.html