在一个语句中一次向哈希映射添加多个条目

2022-08-31 06:57:38

我需要初始化一个常量HashMap,并希望在一行语句中执行此操作。避免像这样:

  hashMap.put("One", new Integer(1)); // adding value into HashMap
  hashMap.put("Two", new Integer(2));      
  hashMap.put("Three", new Integer(3));

与目标C中的类似:

[NSDictionary dictionaryWithObjectsAndKeys:
@"w",[NSNumber numberWithInt:1],
@"K",[NSNumber numberWithInt:2],
@"e",[NSNumber numberWithInt:4],
@"z",[NSNumber numberWithInt:5],
@"l",[NSNumber numberWithInt:6],
nil] 

我没有找到任何例子来说明如何在看过这么多人之后做到这一点。


答案 1

您可以使用双括号初始化,如下所示:

Map<String, Integer> hashMap = new HashMap<String, Integer>()
{{
     put("One", 1);
     put("Two", 2);
     put("Three", 3);
}};

作为警告,请参阅Java的线程效率“双括号初始化”,了解它可能具有的性能影响。


答案 2

从Java 9开始,可以使用Map.of(...),如下所示:

Map<String, Integer> immutableMap = Map.of("One", 1, 
                                           "Two", 2, 
                                           "Three", 3);

此映射是不可变的。如果希望映射可变,则必须添加:

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

如果你不能使用Java 9,你就只能自己编写类似的帮助程序方法,或者使用第三方库(如Guava)为你添加该功能。