如何创建和初始化一个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"));
虽然这是一种可行的办法,但并不认可这种方法,具体原因可阅读公众号之前的文章。
map = Collections.emptyMap(); map = Collections.singletonMap("name", "pumpkin"); assertEquals("pumpkin", map.get("name"));
需要注意的是,这产生的是不可变的Map。
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库应该大多数Java开发都知道,它是google开源的类库,里面有许多非常方便的工具与类。
map = ImmutableMap.of("key1", "value1", "key2", "value2"); map = Maps.newHashMap(map);
以上两行代码分别生成不可变的Map和可变的Map。
本文介绍了生成空的Map,只有一个Entry的Map;可变的Map和不可变的Map。大家可根据自己的需求自行选择。
Java 9对这块有比较大的改进,有兴趣的同学就自行研究吧。