更好的地图构造函数

是否有更简化的方法来执行以下操作?

Map map = new HashMap(); map.put("a", "apple"); map.put("b", "bear"); map.put("c", "cat"); 

我正在寻找更接近这个的东西。

  Map map = MapBuilder.build("a", "apple", "b", "bear", "c", "cat"); 

不,没有,但我写了一个方法来完成这个,受Objective-C NSDictionary类的启发:

 public static Map mapWithKeysAndObjects(Object... objects) { if (objects.length % 2 != 0) { throw new IllegalArgumentException( "The array has to be of an even size - size is " + objects.length); } Map values = new HashMap(); for (int x = 0; x < objects.length; x+=2) { values.put((String) objects[x], objects[x + 1]); } return values; } 

总是有双括号初始化 :

 Map map = new HashMap(){{ put("a", "apple"); put("b", "bear"); put("c", "cat");}}; 

这种方法存在问题。 它返回一个扩展HashMap的匿名内部类,而不是HashMap。 如果您需要序列化地图,那么就知道不鼓励对内部类进行序列化 。

您可以使用Google集合库中的ImmutableMap.Builder 。

您始终可以使用双括号初始化

 Map map = new HashMap() {{ put("foo", "bar"); put("baz", "qux"); }} 

但请记住,根据这些答案,这可能效率不高。