2014-02-20 2 views
3

Мое приложение хранит значения из значений базы данных и пользователя и сравнивает их. Чтобы сохранить эти значения, я использовал hashmap с ключом как целое и перечислил как данные и сохранил значения. Это не обязательно, что ключевые ценности и данные должны быть одинаковыми, но все значения данных в 2 HashMaps должны быть одинаковымиКак мы можем сравнить два hashmap's в java

В HashMaps, как это: ключ: значение

1-[cd,done] 
2-[mb,done] 
3-[core,done] 

другой один

1-[mb,done] 
2-[core,done] 
3-[cd,done] 

в коде выше hasmap должны быть равны независимо от того, в каком порядке значения сохраняются но сейчас я не могу правильно написать код ...

+1

Добавление, что вы уже сделали в вопрос было бы полезно. –

ответ

2

Как я понимаю, вы просто хотите проверить, что значения карт являются равно не карты сам себе.

Таким образом, вы можете просто сравнить values() используя containsAll метод:

hashMap1.values().containsAll(hashMap2.values()) && 
    hashMap2.values().containsAll(hashMap1.values()); 

Вы также можете использовать CollectionUtils.isEqualCollection упростить код:

CollectionUtils.isEqualCollection(hashMap1.values(), hashMap2.values()); 
+0

Я не думал о containsAll() в обоих направлениях, чтобы сделать «равно». приятный произведение :) – slipperyseal

+1

фактически, содержитAll() в обоих направлениях не точный. A, A, B равно A, B, B – slipperyseal

+0

Что делать, если коллекции содержат A, B и A, B, C? Он вернет истину в одном направлении, а не в другом. – LaurentG

1

Вы можете использовать keySet() в комбинации с массовыми операторами или прокручивать обе карты.

for (Map.Entry<String, String> me : hashmap1.entrySet()) // assuming your map is Map<String, String> 
     if(hashmap2.containsKey(me.getKey())) 
      System.out.println("Found Duplicate -> " + me.getKey()) 
0

государственной статической силы основных (String [] арг) {

Map<Integer,String> map1 = new HashMap<Integer,String>(); 
    Map<Integer,String> map2 = new HashMap<Integer,String>(); 

    map1.put(1, "ABC"); 
    map1.put(2, "1123"); 
    map2.put(1, "XYZ"); 

    boolean val = map1.keySet().containsAll(map2.keySet()); 

    for (Entry<Integer, String> str : map1.entrySet()) { 
     System.out.println("================="+str.getKey()); 

     if(map2.containsKey(str.getKey())){ 
      System.out.println("Map2 Contains Map 1 Key"); 
     } 
    } 

    System.out.println("================="+val); 
} 
Смежные вопросы