2014-01-17 35 views
2

有没有更简单的方法来做到这一点?在Java中以更简洁的方式实例化地图

Map<String, Integer> values = new HashMap<String, Integer>(); 
values.put("A", 1); 
values.put("E", 1); 
values.put("D", 2); 
values.put("R", 2); 
values.put("B", 3); 
values.put("M", 3); 
values.put("V", 4); 
values.put("Y", 4); 
values.put("J", 8); 
values.put("X", 8); 

随着Java数组可以例如

int[] temp = {1,2}; 

代替

​​

我期待与上面的地图类似的东西做到这一点。 这可能吗?

感谢您的帮助一如既往:)

+0

你看过HashMap中存在的方法吗?如果你使用eclipse,ctrl + space会给你你的答案。 – TheLostMind

+0

我不知道在HashMap API中寻找什么。你能把我指向正确的方向吗? 和我没有使用eclipse @TheLostMind – herteladrian

+0

好..如果你看看HashMap API,你不会找到任何方法可以帮助你..我会看看彼得的答案...如果需要使用循环... – TheLostMind

回答

2

没有,有这样做的直接方式。

您需要按照您的建议初始化地图。

Map<String, Integer> values = new HashMap<String, Integer>(); 
values.put("A", 1); 
values.put("E", 1); 
values.put("D", 2); 
values.put("R", 2); 
values.put("B", 3); 
values.put("M", 3); 
values.put("V", 4); 
values.put("Y", 4); 
values.put("J", 8); 
values.put("X", 8); 

如果有这些值的任何模式,您可以简化使用一个循环。

另一种方法是使用HashMapBuilder。

另请参见此处。

How to directly initialize a HashMap (in a literal way)?

另一种替代方法是使用Guava。他们有一个这样的方法。

4

你可以试试这个,但你必须要小心:

HashMap<String, Integer> values = new HashMap<String, Integer>() 
{ 
    { 
     put("A", 1); 
     put("E", 1); 
     put("D", 2); 
     put("R", 2); 
     put("B", 3); 
     put("M", 3); 
     put("V", 4); 
     put("Y", 4); 
     put("J", 8); 
     put("X", 8); 
    } 
}; 

了解更多关于Double Brace Initialization here

+1

这就是我在C/C++ –

3

有使用Java而已,但如果你使用Guava,你可以这样做没有更简单的方法:

Map<String, Integer> values = 
    ImmutableMap.<String, Integer> builder().put("A", 1).put("E", 1).put("D", 2).build(); 

参见:

1

如果您认为你知道键和值的组合,你可以这样做,但它是一种破解:

String[] keys = {"A", "B", "C"}; 
int[] values = {1, 2, 3}; 

Map<String, Integer> myMap = new HashMap<String, Integer>(); 

for(int i = 0; i < keys.length; i++){ 
    myMap.put(keys[i], values[i]); 
} 

但是你必须非常小心,最重要的是你的数组应该有相同的长度。

+0

中做的事情请检查你的代码。它没有错误吗? –

+0

@Qadir是的我纠正了它,谢谢指出 – Abubakkar

相关问题