哈希值相同就会调用equals方法比较内容,同一个对象按道理哈希值是相同的啊。如果都不调用equals方法那重写方法时if(this==obj)这句不是没意义了。以下是代码
import java.util.HashSet;
import java.util.Iterator;
class Bu1 {
private String atr;
public Bu1(String atr) {
super();
this.atr = atr;
}
public String getAtr() {
return atr;
}
public void setAtr(String atr) {
this.atr = atr;
}
public int hashCode() {
System.out.println("hashCode执行了");
return 1;
}
public boolean equals(Object obj) {
System.out.println("equals执行了");
return false;
}
public String toString() {
return atr;
}
}
public class abc {
public static void main(String[] args) {
HashSet hs=new HashSet();
Bu1 x=new Bu1("abc1");
Bu1 y=new Bu1("abc2");
hs.add(x);
hs.add(x);
hs.add(y);
Iterator it = hs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
输出:hashCode执行了
hashCode执行了
hashCode执行了
equals执行了
abc1
abc2
java中HashSet集合中存入同一个对象,为什么不会自动调用equals方法
答案:2 悬赏:70 手机版
解决时间 2021-02-18 22:56
- 提问者网友:心如荒岛囚我终老
- 2021-02-18 12:10
最佳答案
- 五星知识达人网友:空山清雨
- 2021-02-18 12:44
这是因为你没有重写SetClass的equals和hashCode方法.
没有重写的时候,对象比较调用的是Object的equals方法,此时你new的每个人都是不同对象,及时名字和长度都一样,也不认为是一个对象.
eclipse为例,可以在文件上右键,自动生成这两个方法,生成的时候选择你需要判断equals的属性即可
没有重写的时候,对象比较调用的是Object的equals方法,此时你new的每个人都是不同对象,及时名字和长度都一样,也不认为是一个对象.
eclipse为例,可以在文件上右键,自动生成这两个方法,生成的时候选择你需要判断equals的属性即可
全部回答
- 1楼网友:白昼之月
- 2021-02-18 13:30
说明,你的equals方法有问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯