【发布时间】:2016-02-20 15:00:34
【问题描述】:
我有一个问题,我重写了 equals 方法并每次都返回 false。 如果我在hashmap中两次放置相同的对象,根据equals实现,它将返回false并且存在具有相同对象的重复条目,但它仅覆盖现有对象。那么它会在与equals比较之前比较地址引用吗?
import java.util.HashMap;
import java.util.Map;
public class MapOverrideequals {
public MapOverrideequals(int anshu) {
this.anshu = anshu;
}
int anshu;
@Override
public boolean equals(Object o) {
return false;
}
public static void main(String[] args) {
Map<MapOverrideequals, String> m = new HashMap<MapOverrideequals, String>();
MapOverrideequals mm = new MapOverrideequals(1);
MapOverrideequals mm1 = new MapOverrideequals(1);
m.put(mm, "ji");
m.put(mm, "ki");
//m.put(mm1, "ansh");
for (Map.Entry<MapOverrideequals, String> m1 : m.entrySet()) {
System.out.println(m1.getKey().anshu + " " + m1.getValue());
}
}
}
输出:1 ki
【问题讨论】:
-
你把mm放了两次,所以最后一个条目会覆盖第一个
-
事实上它会的。但是您对
equals()的实现违反了其contract 的反身性要求。也就是说,对于所有x,x.equals(x)必须为真。你想做什么?可能有更好的方法来解决它。 -
@StuartMarks-这只是一个面试问题,我什么都不想做:)
标签: java dictionary collections hashmap