如何創建和初始化一個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
map = 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對這塊有比較大的改進,有興趣的同學就自行研究吧。






