结论:对于所有继承于AbstractMap的map类(基本上jdk中的map都继承了),直接使用Map.equals()即可
AbstractMap重写了equals方法,保证对两个相同内容的map调用equals比较结果为真,源码如下
public boolean equals(Object o) {
//同一对象相等
if (o == this)
return true;
//不是Map的子类不相等
if (!(o instanceof Map))
return false;
Map<?,?> m = (Map<?,?>) o;
//元素数量不同不相等
if (m.size() != size())
return false;
//遍历
try {
for (Entry<K, V> e : entrySet()) {
K key = e.getKey();
V value = e.getValue();
//空值特殊处理
if (value == null) {
if (!(m.get(key) == null && m.containsKey(key)))
return false;
} else {
//调用元素的equals比较
if (!value.equals(m.get(key)))
return false;
}
}
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
return true;
}