2017-01-25 12 views
0

У меня есть следующий метод, я хотел бы сравнить между 2 HashMap : map1 и map2.Сравните 2 HashMaps в Java

каждый HashMap имеет:

key: string.

value: ArrayList<String> 

То, что я пытаюсь сделать, это проверить, если оба HashMaps равны

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

Следующая карты должны гп TRUE:

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

Нет никакой гарантии, что две карты возвратят записи в том же порядке, даже если все ключи/значения идентичны. – biziclop

+2

'map1.equals (map2)' будет проверять, что на двух картах содержатся одинаковые ключи, сопоставленные с теми же значениями, независимо от порядка, [как указано «Map :: equals'] (https://docs.oracle.com /javase/8/docs/api/java/util/Map.html#equals-java.lang.Object-) – yshavit

ответ

0
  1. Проверьте размер одинаков для обеих карт, которые вы делаете
  2. Убедитесь, что все ключи одинаковы для обеих карт, map1.equals (map2)
  3. Если все ключи одинаковы, затем начинайте захватывать один ключ за раз и сравнивайте аррайалистов.

Если вы никогда не получаете 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

этот псевдо-код должен быть довольно понятным, и вы можете легко реализовать его в существующем методе сравнения @ user9524367 –

1

Если я закажу значения каждого ключа, прежде чем я их сравнивать?

Ваши значения: ArrayList объектов. ArrayLists (или любая другая реализация List) считаются равными, если они имеют одинаковые записи в том же порядке.

Возможно, вы можете использовать вместо этого java.util.Set.

+1

В вопросе вопроса 'ArrayList' нет, но' Set' должен это сделать. – cybergen