是否可以在 Java 中使用已在其中声明的项目制作字典?就像下面的 C# 代码:
Dictionary<string, int> d = new Dictionary<string, int>()
{
{"cat", 2},
{"dog", 1},
{"llama", 0},
{"iguana", -1}
};
我该怎么做?我使用什么类型?我读过字典已经过时了。
最佳答案
这会做你想做的事:
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 的新习惯用法:static Map.of methods 系列.
使用 Java 9 或更高版本,您可以按如下方式创建所需的 map :
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
对于较大的 map ,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
- 他们不会创建 Map 的匿名子类
但是,这些差异对于许多用例来说应该无关紧要,这使其成为 Java 较新版本的良好默认方法。
关于C# 到 Java - 字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6886712/