Как сравнить два HashMap в Java - PullRequest
0 голосов
/ 20 мая 2018

Мне нужно сравнить два HashMap с использованием Java.Я пытался с помощью метода equals (), но это не работает.Я думаю, может быть, поэтому в методе equash () HashMap для сравнения используются ссылки на объекты, а не значения объектов.Пример:

/*FIRST HASHMAP*/
Posto p1 = new Posto("005","Cat1");
Posto p2 = new Posto("001", "Cat2");
Posto p3 = new Posto("009", "Cat2");
Posto p4 = new Posto("005","Cat3");

Map<String, Posto> posti = new HashMap<String, Posto>();

posti.put(p1.getCode(), p1);
posti.put(p2.getCode(), p2);
posti.put(p3.getCode(), p3);
posti.put(p4.getCode(), p4);

/*SECOND HASHMAP*/  
Posto p5 = new Posto("005","Cat1");
Posto p6 = new Posto("001", "Cat2");
Posto p7 = new Posto("009", "Cat2");
Posto p8 = new Posto("005","Cat3");

Map<String, Posto> pos = new HashMap<String, Posto>();

pos.put(p1.getCode(), p5);
pos.put(p2.getCode(), p6);
pos.put(p3.getCode(), p7);
pos.put(p4.getCode(), p8);

/*COMPARE*/
System.out.println(posti.equals(pos)); //THIS RETURNS FALSE (SHOULD BE TRUE)

1 Ответ

0 голосов
/ 20 мая 2018

На самом деле, вы не правы, говоря, что equals метод HashMap сравнивает по ссылкам, а не по значениям.Метод equals наследуется от AbstractMap, который определяет метод equals следующим образом:

Эта реализация сначала проверяет, является ли указанный объект этой картой;если это так, он возвращает истину.Затем он проверяет, является ли указанный объект картой, размер которой идентичен размеру этой карты;если нет, возвращается false.Если это так, он перебирает коллекцию entrySet этой карты и проверяет, содержит ли указанная карта каждое отображение, которое содержит эта карта.Если указанная карта не может содержать такое отображение, возвращается false.Если итерация завершена, возвращается true.

Источник: https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.html#equals(java.lang.Object)

Как следует из комментариев, убедитесь, что методы hashCode и equals вашего классаправильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...