Nic*_*oul 6 java equals set hashcode
将两个相同的对象添加到Set后,我希望该集合只包含一个元素.
public void addIdenticalObjectsToSet(){
Set<Foo> set = new HashSet<Foo>();
set.add(new Foo("totoro"));
set.add(new Foo("totoro"));
Assert.assertEquals(1, set.size()); // PROBLEM: SIZE=2
}
private class Foo {
private String id;
public Foo(String id) {
this.id = id;
}
public String getId() {
return id;
}
public boolean equals(Object obj) {
return obj!= null && obj instanceof Foo &&
((Foo)obj).getId().equals(this.getId());
}
public int hashcode() {
return this.getId().hashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
如果它们具有相同的id(String),我认为两个对象是相同的.
其他奇怪的事情:就我所知,使用调试/断点都不会访问Foo.equals和Foo.hashcode.我错过了什么?
Thi*_*ilo 15
public int hashcode() {
return this.getId().hashCode();
}
Run Code Online (Sandbox Code Playgroud)
应该
@Override
public int hashCode() {
return this.getId().hashCode();
}
Run Code Online (Sandbox Code Playgroud)
注释会告诉你有关拼写错误的信息.
IDE中的方法中还应该有一个(缺少的)小三角符号,用于指示是否正在实现接口或是否覆盖父方法.
| 归档时间: |
|
| 查看次数: |
3057 次 |
| 最近记录: |