C# 到 Java - 字典?

标签 c# java dictionary map new-operator

是否可以在 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/

相关文章:

c# - .NET 程序运行在任何 CPU 与 x86 上

java - 在 Android 上移动数据库

java - 对静态变量的访问被阻止

c# linq 将三个列表连接到嵌套字典

c# - 以编程方式在 TabItem 中加载 UserControl

c# - StackExchange.Redis 字符串值转换为集合

c# - 在XAML的窗口内显示页面

java - Android 操作系统更新时是否有广播/Intent ?

python - flask /神社 : creating a leaderboard out of an unordered dict object

python - 检查字典中是否存在键或值