【发布时间】:2012-08-21 09:22:56
【问题描述】:
我有一个哈希图列表,我想将这些哈希图合并为一个(键应该是唯一的)。我该怎么做?谁能给个提示?
【问题讨论】:
-
创建一个根哈希图,遍历列表,为每个哈希图通过每个(键,值)对添加它到根哈希图。如果您发现重复的密钥,您将决定该怎么做
我有一个哈希图列表,我想将这些哈希图合并为一个(键应该是唯一的)。我该怎么做?谁能给个提示?
【问题讨论】:
一种方法是创建HashMap ubermap 的新实例,遍历ArrayList<HashMap> 并调用ubermap 的putAll() 方法,一次一张地图。一个明智的优化是为有问题的ubermap 提供较大的初始容量,这样您就可以避免多次重新哈希调用。
【讨论】:
你应该看看Map.putAll()函数
【讨论】:
您可以从哈希映射中迭代 trought Map.Entry 条目。您可以使用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(Map m)。遍历您的列表并在结果图上为每个条目执行putAll。
【讨论】:
您可以使用 for-each 循环并使用HashMap.putAll()从一个哈希图中的列表中一一添加映射
【讨论】:
循环通过list 并使用putAll() 将所有地图添加到结果地图中
【讨论】:
方法如下:
创建一个新的(大)哈希图,其中将包含合并的键值对 对
遍历您的列表
对于列表中的每一项,遍历相关的哈希图
对于 hashmap 的每个值,在(大)hashmap 中添加对
【讨论】: