2014-02-20 214 views
3

我的應用程序存儲了數據庫和用戶值的值並進行比較。爲了存儲這些值,我使用hashmap和key作爲整數和列表作爲數據並存儲這些值。這是沒有必要的,關鍵值和數據應該是相同的,但在2個包含HashMap中的所有數據值應該是相同的我們如何比較java中的兩個hashmap

的包含HashMap是這樣的: 鍵:值

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

另一種是

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

在上面代碼中的hasmap應該是平等的,不論什麼樣的順序值存儲 但截至目前,我不能將它正確的代碼......

+1

添加了你已經做了進入正題會有幫助。 –

回答

2

據我所知,你只是想測試該地圖的值等於沒有地圖自理。

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

您也可以使用CollectionUtils.isEqualCollection以簡化代碼:

因此,你可以使用containsAll方法只是比較values()

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

我沒有想過在兩個方向containsAll()做一個「等於」。不錯的工作:) – 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); 
}