我检查了源代码:
public boolean containsKey(Object key) {
Iterator<Map.Entry<K,V>> i = entrySet().iterator();
if (key==null) {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (e.getKey()==null)
return true;
}
} else {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (key.equals(e.getKey()))
return true;
}
}
return false;
}
public boolean equals(Object obj) {
return (this == obj);
}
从源代码中,它只显示了“equal()”方法已被调用,所以如果我想在地图中放置一个自定义对象,我只需要覆盖“equal()”方法。所以我做了一个实验,结果是否定的......我必须同时覆盖 "equals()" 和 "hashCode()" 。所以我的问题是:
- 为什么必须覆盖这两种方法(equals(),hashCode())。
- “==”操作是否在内部调用“hashCode()”方法?