0

ハッシュマップのリストがあり、これらのハッシュマップを1つにマージしたいと思います(キーは一意である必要があります)。どのように私はそれをしなければならないでしょうか?誰かが私にヒントを与えることができますか?

4

7 に答える 7

3

これを行う1つの方法は、の新しいインスタンスを作成し、ubermapのメソッドをHashMap ubermap繰り返してArrayList<HashMap>呼び出し、一度に1つのマップを呼び出すことです。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

MapメソッドがありputAll(Map m)ます。リストを繰り返し処理し、putAllすべてのエントリの結果マップで実行します。

于 2012-08-21T09:25:48.753 に答える
0

for-eachループを使用し、 HashMap.putAll()を使用して1つのハッシュマップのリストからマップを1つずつ追加できます。

于 2012-08-21T09:25:57.077 に答える
0

ループしてlist、すべてのマップを結果のマップに追加します。putAll()

于 2012-08-21T09:26:06.930 に答える
0

方法は次のとおりです。

  1. マージされたキーと値のペアを含む新しい(大きな)ハッシュマップを作成します

  2. リストを繰り返し処理します

  3. リストの各項目について、問題のハッシュマップを繰り返し処理します

  4. ハッシュマップの値ごとに、(大きな)ハッシュマップにペアを追加します

于 2012-08-21T09:27:04.370 に答える