C#到Java-词典?

WildBamaBoy:

用Java在字典中可以声明已经声明的项目吗?就像下面的C#代码一样:

   Dictionary<string, int> d = new Dictionary<string, int>()
    {
        {"cat", 2},
        {"dog", 1},
        {"llama", 0},
        {"iguana", -1}
    };

我该怎么办?我要使用哪种类型?我读过字典已过时。

肖恩·赖利(Sean Reilly):

这将做您想要的:

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较新版本的良好默认方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章