问个神奇的问题,重写了hashCode和equals,为什么Set还能添加重复的

2012-08-17 09:33:42
废话不多说,上代码:
-----------------------------------------------
package mytest;

import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;

import org.junit.Test;

public class CollectionTest {

@Test
public void equalsTest() {

Set<Po> set = new HashSet<Po>();
Po po1 = new Po();
Po po2 = new Po();

set.add(po1);
set.add(po2);

System.out.println("po1.hashCode() == po2.hashCode() : " + (po1.hashCode() == po2.hashCode()));
System.out.println("po1.equals(po2) : " + po1.equals(po2));
System.out.println(set.size());

}
}

class Po {

private int id;
private String name;
private String value;

public int hashCode() {

return (id + name + value).hashCode();
}

public boolean equals(Po po) {

return this.hashCode() == po.hashCode()
&& this.getId() == po.getId()
&& this.getName() == null ? po.getName() == null : this.getName().equals(po.getName())
&& this.getValue() == null ? po.getValue() == null : this.getValue().equals(po.getValue());
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}


}

-------------------------------------
下面是运行结果
po1.hashCode() == po2.hashCode() : true
po1.equals(po2) : true
set.size() : 2

-----------------------------------
请问问题出在哪?
...全文
135 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mynameisxula 2012-08-17
  • 打赏
  • 举报
回复
重写有误
2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Java code

@Override
public boolean equals(Object o) {
Po po = (Po)o;
return this.hashCode() == po.hashCode()
&& this.getId() == po.get……
[/Quote]
是的,重写参数不对
scbb 2012-08-17
  • 打赏
  • 举报
回复

@Override
public boolean equals(Object o) {
Po po = (Po)o;
return this.hashCode() == po.hashCode()
&& this.getId() == po.getId()
&& this.getName() == null ? po.getName() == null : this.getName().equals(po.getName())
&& this.getValue() == null ? po.getValue() == null : this.getValue().equals(po.getValue());
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧