如何在Java中比较两个HashMap

时间:2018-05-20 14:37:20

标签: java hashmap

我需要使用Java比较两个HashMap。 我尝试使用equals()方法,但这不起作用。 我想,也许,这就是为什么在HashMap中equals()方法使用对象引用来比较,而不是对象值。 例如:

/*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 :(得分:4)

实际上,你并不是说equals HashMap方法通过引用而不是值进行比较。 equals方法继承自AbstractMap,它将equals方法定义如下:

  

此实现首先检查指定的对象是否为此映射;   如果是这样,它返回true。然后,它检查指定的对象是否为a   地图的大小与此地图的大小相同;如果没有,它   返回false。如果是这样,它会迭代这个map的entrySet集合,   并检查指定的地图是否包含此地图的每个映射   包含的内容。如果指定的映射未能包含此类映射,则为false   退回。如果迭代完成,则返回true。

来源:https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.html#equals(java.lang.Object)

根据评论提示,请确保您班级的hashCodeequals方法正确无误。