如何創(chuàng)建和初始化一個(gè)HashMap,看似簡(jiǎn)單的問(wèn)題,其實(shí)真的挺簡(jiǎn)單的,但我們希望從多種方法中,選擇一個(gè)最簡(jiǎn)潔方便、可讀性也高的方法。
代碼塊初始化
可以使用靜態(tài)代碼塊和非靜態(tài)代碼塊,都可以進(jìn)行初始化,要針對(duì)變量是否是靜態(tài)變量來(lái)選擇。
private static Map<String, String> map; { map = new HashMap<>(); map.put("name", "pumpkin"); map.put("location", "Guangzhou"); }
雙大括號(hào)初始化
Map<String, String> map = new HashMap<String, String>() {{ put("name", "pumpkin"); put("sex", "M"); }}; assertEquals("pumpkin", map.get("name"));
雖然這是一種可行的辦法,但并不認(rèn)可這種方法,具體原因可閱讀公眾號(hào)之前的文章。
使用JAVA集合工具類(lèi)Collections
map = Collections.emptyMap(); map = Collections.singletonMap("name", "pumpkin"); assertEquals("pumpkin", map.get("name"));
需要注意的是,這產(chǎn)生的是不可變的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庫(kù)
Guava庫(kù)應(yīng)該大多數(shù)Java開(kāi)發(fā)都知道,它是google開(kāi)源的類(lèi)庫(kù),里面有許多非常方便的工具與類(lèi)。
map = ImmutableMap.of("key1", "value1", "key2", "value2"); map = Maps.newHashMap(map);
以上兩行代碼分別生成不可變的Map和可變的Map。
總結(jié)
本文介紹了生成空的Map,只有一個(gè)Entry的Map;可變的Map和不可變的Map。大家可根據(jù)自己的需求自行選擇。
Java 9對(duì)這塊有比較大的改進(jìn),有興趣的同學(xué)就自行研究吧。