更好的地图构造函数
是否有更简化的方法来执行以下操作?
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"); }}
但请记住,根据这些答案,这可能效率不高。