试了一下是可以的但是看源码又不太明白
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));
试了一下是可以的但是看源码又不太明白
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也相等。