0

我有一个哈希图列表,我想将这些哈希图合并为一个(键应该是唯一的)。我该怎么做?任何人都可以给我一个提示吗?

4

7 回答 7

3

一种方法是创建一个新实例HashMap ubermap,遍历 ubermap 的ArrayList<HashMap>并调用putAll()方法,一次一张地图。一个聪明的优化是给有ubermap问题的一个大的初始容量,这样你就可以避免许多重新哈希调用。

于 2012-08-21T09:25:48.593 回答
1

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;
    }
于 2012-08-21T09:25:05.437 回答
1

你应该看看Map.putAll()函数

于 2012-08-21T09:25:32.540 回答
0

循环list并使用将所有地图添加到结果地图putAll()

于 2012-08-21T09:26:06.930 回答
0

Here is the way:

  1. Create a new (big) hashmap that will contain the merged key-value pairs

  2. Iterate through your list

  3. For each item of your list, iterate through the hashmap in question

  4. For each value of the hashmap, add the pair in the (big) hashmap

于 2012-08-21T09:27:04.370 回答
0

Map有方法putAll(Map m)。遍历您的列表并对putAll每个条目执行结果映射。

于 2012-08-21T09:25:48.753 回答
0

您可以使用 for-each 循环并使用HashMap.putAll()从一个哈希图中的列表中一一添加映射

于 2012-08-21T09:25:57.077 回答