您可以通过查看HashMap#Equals()的来源轻松检查这一点。比较非空键的值。
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Map))
return false;
Map<K,V> m = (Map<K,V>) o;
if (m.size() != size())
return false;
try {
Iterator<Entry<K,V>> i = entrySet().iterator();
while (i.hasNext()) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
if (value == null) {
if (!(m.get(key)==null && m.containsKey(key)))
return false;
} else {
if (!value.equals(m.get(key)))
return false;
}
}
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
return true;
}
编辑:
解释: Entry 是一{key,value}
对。HashMapEntry
在一个 EntrySet 中维护这些 s。现在比较两张地图:我可以遍历所有的Entry
s 并继续比较Entry.value with anothermap.get(Entry.key)
。因此,从本质上讲,equals()
在比较地图时,你们中的价值对象很重要。