C#到Java – 字典?

是否有可能在Java中使用已经在其中声明的项目来制作词典? 就像下面的C#代码一样:

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

我如何做到这一点,我使用什么types? 我读过这个词典已经过时了。

这将做你想要的:

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

这个陈述创build了一个HashMap的匿名子类,与父类唯一的区别是在创build实例时添加了4个条目。 在Java世界中这是一个相当常见的习惯用法(尽pipe有些人认为它有争议,因为它创build了一个新的类定义)。

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

咬下子弹,input地图名称!

  Map<String, Integer> map = new HashMap<String, Integer>(); map.put("cat", 2); map.put("dog", 1); map.put("llama", 0); map.put("iguana", -1); 

你也可以做这样的事情,这可以节省一些打字的长列表:

  Object[][] values = { {"cat", 2}, {"dog", 1}, {"llama", 0}, {"iguana", -1} }; for (Object[] o : values) { map.put((String) o[0], (Integer) o[1]); } 

如果使用Guava库 ,可以使用它自己的ImmutableMap类(例1和例2),或者作为HashMap的初始化方法(例3和例4):

 Map<String, Integer> map1 = ImmutableMap.<String, Integer> builder() .put("cat", 2) .put("dog", 1) .put("llama", 0) .put("iguana", -1) .build(); Map<String, Integer> map2 = ImmutableMap.of( "cat", 2, "dog", 1, "llama", 0, "iguana", -1 ); Map<String, Integer> map3 = Maps.newHashMap( ImmutableMap.<String, Integer> builder() .put("cat", 2) .put("dog", 1) .put("llama", 0) .put("iguana", -1) .build() ); Map<String, Integer> map4 = Maps.newHashMap( ImmutableMap.of( "cat", 2, "dog", 1, "llama", 0, "iguana", -1) ); 

Java7几乎引入了“集合文字”,这将允许这样的语法。 他们可能会尝试用Java8推它。 我不知道这些人有什么问题。

这可以通过某种包装API轻松实现

 Map<String,Integer> map = Maps.<String,Integer>empty() .put("cat", 2).put("dog",1)....; 

不错。 我更喜欢类似的东西

 map("cat", "dog", ... ) .to( 1, 2, ... ); 

这种事情一定是由各种各样的人来实现的,不幸的是标准的API不包含这样的东西。