我有2张地图,
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
map1 has {SD="BBBBBB", DNN="Internet", SST=2}
map2 has {SD="BBBBBB", DNN="Internet", SST=2}
map1.equals(map2) => false
我需要输出为真。我需要为它使用什么?
我需要输出为真。我需要为它使用什么?
好吧,相等的地图。
根据Javadoc forMap.equals(Object)
:
如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true。更正式地说,两个映射m1和m2表示相同的映射,如果
m1.entrySet().equals(m2.entrySet())
。
HashMap
具有正确的equals
实现;因此,你可以得出的结论是,条目集实际上是不相等的。
Java对象的字符串表示很容易看起来与另一个对象相同(例如"0"
,Integer.valueOf(0)
和Long.valueOf(0)
都打印为0
);字符串也可能包含不可打印的字符,例如"0 "
和"0"
将打印相同的字符,但不相等。当然,如果你使用自定义对象,你需要确保equals
和hashCode
被正确实现。
检查两个集合中的键和值,看哪一个导致它们不相等。
例如:
Set<Map.Entry<?, ?>> entrySet1 = new HashSet<>(map1.entrySet());
entrySet1.removeAll(map2.entrySet());
if (!entrySet1.isEmpty()) {
System.out.println("Entries only in map1: " + entrySet1);
}
Set<Map.Entry<?, ?>> entrySet2 = new HashSet<>(map2.entrySet());
entrySet2.removeAll(map1.entrySet());
if (!entrySet2.isEmpty()) {
System.out.println("Entries only in map2: " + entrySet2);
}