ハッシュマップのリストがあり、これらのハッシュマップを1つにマージしたいと思います(キーは一意である必要があります)。どのように私はそれをしなければならないでしょうか?誰かが私にヒントを与えることができますか?
7 に答える
これを行う1つの方法は、の新しいインスタンスを作成し、ubermapのメソッドをHashMap ubermap
繰り返してArrayList<HashMap>
呼び出し、一度に1つのマップを呼び出すことです。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()関数を確認する必要があります
Map
メソッドがありputAll(Map m)
ます。リストを繰り返し処理し、putAll
すべてのエントリの結果マップで実行します。
for-eachループを使用し、 HashMap.putAll()を使用して1つのハッシュマップのリストからマップを1つずつ追加できます。
ループしてlist
、すべてのマップを結果のマップに追加します。putAll()
方法は次のとおりです。
マージされたキーと値のペアを含む新しい(大きな)ハッシュマップを作成します
リストを繰り返し処理します
リストの各項目について、問題のハッシュマップを繰り返し処理します
ハッシュマップの値ごとに、(大きな)ハッシュマップにペアを追加します