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

qq_36080466 qq_36080466 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
哈希值相同就会调用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
存y时才调用了equals,存第二个x时没调用equals,哈希值都一样啊
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
qq_36080466
Java SE 62,621 成员 307,251 内容