pkslow.com 南瓜慢说

  • AllArticles
  • Container
  • Spring
  • Life
  • Cloud
  • Collections
  • About
  • GitHub

  • Search
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java

如何创建和初始化一个HashMap?

Created on: 2019-09-29 | Category: Java | 0 | View: 615

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

1 代码块初始化

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

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

2 双大括号初始化

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

虽然这是一种可行的办法,但并不认可这种方法,具体原因可阅读之前的文章:Java双大括号{}的初始化。

3 使用Java集合工具类Collections

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

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

4 使用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));

5 使用Guava库

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

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

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

6 总结

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

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


Code for all: GitHub

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

file

Recommendations:
Cloud Native
Terraform
Container: Docker/Kubernetes
Spring Boot / Spring Cloud
Https
如何制定切实可行的计划并好好执行

  • Author 作者: LarryDpk 南瓜慢说
  • Link 链接: https://www.pkslow.com/archives/java-initialize-hashmap
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# Terraform101 # English # Terraform # Middleware # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # Plan # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # Performance # Email # Springboot # JavaCollections # ArrayList # Java
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java
Mockito如何mock一条链式调用
各种集合类的合并(数组、List、Set、Map)
  • Contents
  • Site Overview
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

多读书,多分享;多写作,多整理。

241 Posts
9 Categories
30 Tags
RSS
0%
© 2020 — 2022 南瓜慢说 pkslow The WebSite keeping alive:   粤ICP备20036375号