【发布时间】:2019-11-02 02:17:54
【问题描述】:
有两个对象:
private class Monkey{
String name;
public Monkey(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
return name.equals(((Monkey) obj).name);
}
}
@Test
public void contain(){
Monkey monkey1 = new Monkey("Jon");
Monkey monkey2 = new Monkey("Jon");
java.util.Set<Monkey> monkeySet = new HashSet<>();
monkeySet.add(monkey1);
System.out.println(monkeySet.contains(monkey2));
// false
monkeySet.add(monkey2);
System.out.println(monkeySet.size());
// 2
}
使用HashSet,它认为monkey1 和monkey2 不是同一个对象。但是在我的项目中,如果monkey1.name == monkey2.name,那么它们应该是一样的。
如何让 HashSet 认为 monkey1 和 monkey2 相同?
【问题讨论】:
-
还需要覆盖
Monkey中的hashCode()方法。
标签: java collections containers