2017-01-25 7 views
0

私は以下のメソッドを持っています.2つのHashMap :map1とmap2を比較したいと思います。Javaで2つのHashMapsを比較します。

ごとのHashMapがあります:私は何をしようとしていますが、両方のハッシュマップには、次の

public boolean compareT(HashMap map1, HashMap map2) { 

     Iterator entriesH = map1.entrySet().iterator(); 
     Iterator entriesE = map2.entrySet().iterator(); 

     if (map1.size() == map2.size()) { 
      while (entriesE.hasNext() && entriesH.hasNext()) { 
       Map.Entry eEntry = (Map.Entry) entriesE.next(); 
       Map.Entry hEntry = (Map.Entry) entriesH.next(); 
      } 
     } 
} 

EDIT

等しいかどうかを確認することです

key: string.

value: ArrayList<String> 

マップはretuする必要がありますTRUE RN:

map1: 
key: key1, value: v1, v6, v3, v2 
key: key2, value: b1, b6, b2, b7 


map2: 
key: key1, value: v6, v3, v2, v1 
key: key2, value: b6, b1, b7, b2 
+2

だから何が問題なのですか? – csmckelvey

+4

すべてのキー/値が同じであっても、2つのマップが同じ順序でエントリを返すという保証はありません。 – biziclop

+2

'map1.equals(map2)'は、 'Map :: equals'(https://docs.oracle.com)で指定されているように、順序にかかわらず同じ値にマップされた同じキーを2つのマップが含んでいることを確認します/javase/8/docs/api/java/util/Map.html#equals-java.lang.Object-) – yshavit

答えて

0
  1. は、サイズを確認してくださいあなたは、map1.equals(MAP2)
  2. 場合は、すべてのキーが両方のマップで同じであることを
  3. チェックを行い、両方のマップ、のために同じですすべてのキーが同じである場合、一度に1つのキーを取得し、arraylistsを比較し始めます。

map1.get(key).get(index)!= map2.get(key).get(index)を使用すると、マップが同じであることを確認できます。

擬似コード

if(map1.size == map2.size && map1.equals(map2)) 
    //in here means the keys are the same 
    allkeys = map1's keys 
    for (string key : allKeys) 
     //now we need to loop through the arraylists 
     map1Arraylist = map1.get(key) 
     map2Arraylist = map2.get(key) 
     //check the sizes are the same if not return false right away 
     if(map1Arraylist.size != map2Arraylist.size) return false; 
     //if we got to here we now must check each index is the same 
     for(index = 0; index < map1Arraylist.size; index++) 
      //if a single index of the arraylists don't match up we return false 
      if(map1Arraylist.get(index) != map2Arraylist.get(index)) 
       return false; 

    //if we get out of all the above logic then we have the same maps 
    return true; 
else return false; 
+0

コード例を共有できますか? – user9524367

+1

この擬似コードはかなり自明で、既存のcompareメソッドに簡単に実装できます@ user9524367 –

1

私はそれらを比較する前に、私は、すべてのキーの値を注文するべきでしょうか?

値はArrayList個です。 ArrayLists(または他のList実装)は、同じエントリが同じ順序である場合にのみ、等しいとみなされます

多分java.util.Setの何らかの種類を使用することができます。

+1

質問に 'ArrayList'はありませんが、' Set'はそれを行うべきです。 – cybergen

関連する問題