这将执行您想要的操作:
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开始,有一个方便构建映射的新习语:静态Map.of方法家族。
使用 Java 9 或更高版本,您可以按如下方式创建所需的映射:
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
对于较大的映射,此替代语法可能不太容易出错:
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来说是一个很好的默认方法。