永发信息网

java中HashSet集合中存入同一个对象,为什么不会自动调用equals方法

答案:2  悬赏:70  手机版
解决时间 2021-02-18 22:56
哈希值相同就会调用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
最佳答案
这是因为你没有重写SetClass的equals和hashCode方法.
没有重写的时候,对象比较调用的是Object的equals方法,此时你new的每个人都是不同对象,及时名字和长度都一样,也不认为是一个对象.
eclipse为例,可以在文件上右键,自动生成这两个方法,生成的时候选择你需要判断equals的属性即可
全部回答
说明,你的equals方法有问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
急!!我家金毛狗狗7 .8个月大,拉肚子黄色的
我房间靠床的一边白墙壁很空,怎样让房间看上
【保密守则】保密守则的内容是什么?
如何判断月干有根
虎妈猫爸毕胜男赵薇开的是什么车
重庆市兴黎农业开发有限公司在哪里啊,我有事
别克君越08款自动挡不好用但是手动挡就一档怎
.Do you ________(like)_________(run)?
食物与空气的共同通道是BA. 喉B. 咽C. 气管D.
跪求一句最好的翻译。十万火急!
九牧五星定制体验店地址在什么地方,想过去办
西安美术学院为什么有那么多拴马桩
雪一景地址有知道的么?有点事想过去
92年参加工作的医务人员医师职称晋升是如何规
【鸦雀无声的近义词】鸦雀无声的近义词是啥呀
推荐资讯
星月菩提子潮湿了,黑点晕染了怎么办
我们结婚吧里面的果然和桃子在ktv合唱的歌曲
卤素原子和什么有机物反应
身大热,汗大出,大渴引饮,面赤气粗苔黄燥,
蜗居第九集,陈总让海藻送个信封给宋秘书...到
我电脑安装独立显卡后开机不到10秒就自动关机
怎样把白色灯光变成黄色灯光 (不换灯泡的情
有多个输入法,怎么能一下就切换到自己想要的
大连海事大学要转专业该怎么办
骆驼祥子之祥子的第一辆车情节梗概
关于胡歌的励志作文
四中有金文体店怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?