Вопрос по hashmap, java – Как сравнить два хеш-карты в Java?

0

У меня есть две хэш-карты, такие как следующие:

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

Ключи не совпадают, но значения одинаковы, а иногда значения не совпадают.

я хочу узнать значение, которого нет вemployeemap при сравнении сworkingdaymap

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

но это дает мне ноль из employeeMap.

Не могли бы вы помочь мне решить эту проблему?

С уважением Тони

Хорошо, этот код выглядит хорошо. Что вы подразумеваете под "он дает вам ноль"? Есть ли исключение? Можем ли мы получить трассировку стека? Louis Wasserman
Проверять, выписыватьсяvalues() функцияHashMap. nhahtdh
Не могли бы вы предоставить больше кода, который дает вамnull? Где жеwKey родом из? Какой тип даты вы используете, и делает егоequals() метод делать то, что вы думаете, что делает? Louis Wasserman
Итератор & л; Строка & GT; workingDayIterator = workingdayMap.keySet (). iterator (); while (workingDayIterator.hasNext ()) {String wKey = workingDayIterator.next (); if (! employeeMap.containsValue (workingdayMap.get (wKey))) {// получить значения}} SAR

Ваш Ответ

4   ответа
2

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

Мы получаем все значения изworkingdayMap с использованиемvalues() метод. Мы не хотим изменять этоCollection прямо как это изменитworkingdayMap поэтому мы создаемSet наших ценностей называетсяworkingValues.

Затем мы удаляем все значения, найденные в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);
0

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

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

если мы увидим даты, разница будет четко видна.27/4/2012 отличается от27/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");
                    }

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

:) Tony

Error: User Rate Limit Exceeded SAR
2

вы пытаетесь увидеть, содержит ли карта один и тот же объект (в общем, его хеш, который будет другим, если вы не сохранили EXACT один и тот же экземпляр на обеих картах), а не значение объекта.

Похожие вопросы