我有一个哈希图列表,我想将这些哈希图合并为一个(键应该是唯一的)。我该怎么做?任何人都可以给我一个提示吗?
7 回答
一种方法是创建一个新实例HashMap ubermap
,遍历 ubermap 的ArrayList<HashMap>
并调用putAll()
方法,一次一张地图。一个聪明的优化是给有ubermap
问题的一个大的初始容量,这样你就可以避免许多重新哈希调用。
Map.Entry
您可以从哈希映射中迭代 trought条目。entrySet()
您可以使用方法获取条目。代码应如下所示:
public static <X,Y> Map<X,Y> test(Collection<Map<X,Y>> maps){
HashMap<X,Y> result = new HashMap<X,Y>();
for (Map<X,Y> singleMap:maps){
for(Map.Entry<X,Y> entry:singleMap.entrySet()){
result.put(entry.getKey(),entry.getValue());
}
}
return result;
}
UPD:许多用户明智地建议使用putAll
方法,但我忘记了。所以最好使用这段代码:
public static <X,Y> Map<X,Y> test(Collection<Map<X,Y>> maps){
HashMap<X,Y> result = new HashMap<X,Y>();
for (Map<X,Y> singleMap:maps){
result.putAll(singleMap);
}
return result;
}
你应该看看Map.putAll()函数
循环list
并使用将所有地图添加到结果地图putAll()
Here is the way:
Create a new (big) hashmap that will contain the merged key-value pairs
Iterate through your list
For each item of your list, iterate through the hashmap in question
For each value of the hashmap, add the pair in the (big) hashmap
Map
有方法putAll(Map m)
。遍历您的列表并对putAll
每个条目执行结果映射。
您可以使用 for-each 循环并使用HashMap.putAll()从一个哈希图中的列表中一一添加映射