試了一下是可以的但是看源碼又不太明白
HashMap<String,String>n1=new HashMap<String,String>(){{put("2","s");}};
HashMap<String,String>n2=new HashMap<String,String>(){{put("2","s");}};
System.out.println(n1.equals(n2));
頭兩行數據是jdk1.7的新功能,看了下HashMap的equals方法:
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Map))
return false;
Map<?,?> m = (Map<?,?>) 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;
}
官方解釋是這樣的:
1 檢查兩個對象是否是同一個對象引用,如果是,則顯然相等;
2 檢查比較對象是否是Map 類型,且與當前Map對象有相同的size個數
3 迭代當前對象,並且一一比較當前對象的每個key是否都在被比較對象中,並且值也相等。
其實很好理解,兩個Map相等,則必然兩個Map有相同的size,相同的keySet,並且每個key對應的value也相等。