2014-02-20 4 views
3

데이터베이스 및 사용자 값의 값을 저장하고 비교하는 내 애플리케이션. 이러한 값을 저장하기 위해 나는 hashmap을 key와 integer로 사용하고 데이터를 데이터로 저장하고 값을 저장했습니다. 이 키 값 데이터가 동일해야한다는 필요는 없지만 두 HashMaps을 모든 데이터 값이 HashMaps을이 같다자바에서 두 개의 해시 맵을 비교하는 방법

같아야한다 : 키 값

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

다른 하나

되고 위의 hasmap에 관계없이 값이 저장되어 있지만, 지금의 나는 올바르게 코딩 할 수없는 오전 주문 무엇 같아야 코드에서
1-[mb,done] 
2-[core,done] 
3-[cd,done] 

...

+1

이미 질문에 무슨 짓을했는지 추가 도움이 될 것입니다. –

답변

2

내가 알고있는 것처럼, 당신은 단지지도의 값이지도 스스로가 같지 않음 것을 테스트 할. 코드를 단순화하기 위해

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

당신은 또한 CollectionUtils.isEqualCollection을 사용할 수 있습니다 :

따라서 당신은 단지 containsAll 방법을 사용하여 values()을 비교할 수

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

나는 양쪽 방향에서 containsAll()을 "equals"라고 생각하지 않았습니다. 좋은 직장 :) – slipperyseal

+1

실제로, 양방향 containsAll() 정확하지 않습니다. 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

공공 정적 무효 메인 (문자열 []에 args) {

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); 
} 
관련 문제