这会做你想做的事:
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};
该语句创建了一个HashMap的匿名子类,与父类的唯一区别是在实例创建过程中添加了4个条目。这是 Java 世界中相当普遍的习惯用法(尽管有些人认为它有争议,因为它创建了一个新的类定义)。
由于这个争议,从 Java 9 开始,出现了一种方便构建地图的新习惯用法:static Map.of methods 家族。
使用 Java 9 或更高版本,您可以按如下方式创建所需的地图:
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
对于较大的地图,这个alternative syntax 可能不太容易出错:
Map<String, Integer> map = Map.ofEntries(
Map.entry("cat", 2),
Map.entry("dog", 1),
Map.entry("llama", 0),
Map.entry("iguana", -1)
);
(如果 Map.entry 是静态导入而不是显式引用,这尤其好)。
除了仅适用于 Java 9+ 之外,这些新方法与之前的方法并不完全相同:
- 它们不允许您指定使用的 Map 实现
- 他们只创建不可变的地图
- 他们不会创建 Map 的匿名子类
但是,对于许多用例来说,这些差异应该无关紧要,因此对于较新版本的 Java 来说,这是一个很好的默认方法。