在Java中以更简洁的方式实例化地图

时间:2014-01-17 06:49:02

标签: java arrays map hashmap instantiation

有没有更短的方法呢?

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};

而不是

int[] temp = new int[2]
temp[0] = 1;
temp[1] = 2;

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

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

4 个答案:

答案 0 :(得分: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 :(得分:3)

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

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

另见:

答案 2 :(得分: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。他们有一个方法。

答案 3 :(得分: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]);
}

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