比较包含<字符串,对象>的两个映射的键和值



我有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"将打印相同的字符,但不相等。当然,如果你使用自定义对象,你需要确保equalshashCode被正确实现。

检查两个集合中的键和值,看哪一个导致它们不相等。

例如:

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);
}

相关内容

  • 没有找到相关文章

最新更新