C#到Java是否可以用已经声明的项来制作字典呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (69)

在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.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的一种很好的默认方法。

用户回答回答于
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};

扫码关注云+社区

领取腾讯云代金券