2012-05-30 92 views
0

我有兩個哈希映射如下所示:如何比較java中的兩個hashmaps?

1.=============Employee================= 


Key : 1_10 : Value : 13/04/2012 
Key : 1_11 : Value : 18/04/2012 
Key : 1_12 : Value : 19/04/2012 
Key : 1_14 : Value : 23/04/2012 
Key : 1_13 : Value : 20/04/2012 
Key : 1_16 : Value : 25/04/2012 
Key : 1_1 : Value : 02/04/2012 
Key : 1_15 : Value : 24/04/2012 
Key : 1_18 : Value : 27/04/2012 
Key : 1_3 : Value : 04/04/2012 
Key : 1_17 : Value : 26/04/2012 
Key : 1_2 : Value : 03/04/2012 
Key : 1_5 : Value : 06/04/2012 
Key : 1_19 : Value : 30/04/2012 
Key : 1_4 : Value : 05/04/2012 
Key : 1_7 : Value : 10/04/2012 
Key : 1_6 : Value : 09/04/2012 
Key : 1_9 : Value : 12/04/2012 
Key : 1_8 : Value : 11/04/2012 

2.=============Working day================= 

Key : 27 : Value : 27/4/2012 
Key : 02 : Value : 02/4/2012 
Key : 26 : Value : 26/4/2012 
Key : 19 : Value : 19/4/2012 
Key : 11 : Value : 11/4/2012 
Key : 04 : Value : 04/4/2012 
Key : 30 : Value : 30/4/2012 
Key : 06 : Value : 06/4/2012 
Key : 13 : Value : 13/4/2012 
Key : 09 : Value : 09/4/2012 
Key : 03 : Value : 03/4/2012 
Key : 23 : Value : 23/4/2012 
Key : 20 : Value : 20/4/2012 
Key : 16 : Value : 16/4/2012 
Key : 10 : Value : 10/4/2012 
Key : 18 : Value : 18/4/2012 
Key : 25 : Value : 25/4/2012 
Key : 17 : Value : 17/4/2012 
Key : 12 : Value : 12/4/2012 
Key : 24 : Value : 24/4/2012 
Key : 05 : Value : 05/4/2012 

鍵是不一樣的,但價值是相同的,有時值是不一樣的。

我想找出與workingdaymap

if (!employeeMap.containsValue(workingdayMap.get(wKey))) { 
    //take the value which is not present in employeeMap which is present in workingdayMap 
} 

比較時不存在於employeemap值,但它給了我從EmployeeMap的空。

你能幫我解決這個問題嗎?

問候 託尼

+2

退房'值()'HashMap'的'功能。 – nhahtdh

+2

你能否提供更多給你'null'的代碼? 'wKey'從哪裏來?你使用的是哪種日期類型,並且它的'equals()'方法是否按照你認爲的那樣來執行? –

+0

迭代器 workingDayIterator = workingdayMap.keySet()。iterator(); \t \t而(workingDayIterator.hasNext()){ \t \t \t字符串WKEY = workingDayIterator.next(); \t \t \t \t \t如果(!employeeMap.containsValue(workingdayMap。得到(WKEY))){ \t \t \t \t //獲取值 \t \t \t} \t \t \t \t \t} – SAR

回答

0

下面是完美工作的代碼,比較失敗的原因是地圖值不同。

Key : 27 : Value : 27/4/2012, Key : 1_18 : Value : 27/04/2012 

如果我們看到日期,則區別很明顯。 27/4/201227/04/2012不同,因爲我將它作爲字符串存儲。

Iterator<Map.Entry<String,String>> holyDayiterator = workingdayMap.entrySet().iterator(); 

       while (holyDayiterator.hasNext()) { 
        Map.Entry holiDayEntry = holyDayiterator.next(); 
        if(!employeeMap.containsValue((holiDayEntry.getValue()))){ 
         System.out.println("works perfect"); 
        } 

謝謝你們的支持和投票的人們。

:) 託尼

+0

大託尼,你明白了。 – SAR

2

是價值Date對象?如果是這樣,你試圖查看地圖是否包含相同的對象(以及它的散列,除非在兩個地圖中存儲了相同的EXACT實例),而不是對象的值。

2

像這樣的東西應該工作:

Set workingValues = new HashSet(workingdayMap.values()); 
workingValues.removeAll(employeeMap.values()); 

我們得到使用values()方法出workingdayMap所有值。我們不想直接修改此Collection,因爲這會修改workingdayMap,所以我們創建了一個名爲workingValues的值爲Set

然後,我們刪除在employeeMap中找到的所有值,這些值將保留workingdayMap中的值,但不包含在employeeMap中的值爲workingValues

2

你可以請這樣嘗試。

HashMap<String, Date> employeeMap = new HashMap<String, Date>(); 

    HashMap<String, Date> workingdaymap = new HashMap<String, Date>(); 

    Set<String> values1 = new HashSet<String>(employeeMap.values()); 
    Set<String> values2 = new HashSet<String>(workingdaymap.values()); 
    boolean equal = values1.equals(value2);