繁体   English   中英

如何在Java中比较两个HashMap

[英]How to compare two HashMap in Java

我需要使用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)

实际上,您说HashMapequals方法是按引用而不是值进行比较是不对的。 equals方法从AbstractMap继承, AbstractMap定义equals方法如下:

此实现首先检查指定的对象是否是此映射; 如果是这样,则返回true。 然后,它检查指定的对象是否是一个地图,其大小与此地图的大小相同; 如果不是,则返回false。 如果是这样,则遍历此映射的entrySet集合,并检查指定的映射是否包含此映射包含的每个映射。 如果指定的映射未能包含此类映射,则返回false。 如果迭代完成,则返回true。

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

如注释所示,请确保您的类的hashCodeequals方法正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM