java中HashSet集合中存入同一个对象,为什么不会自动调用equals方法
哈希值相同就会调用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,哈希值都一样啊
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,哈希值都一样啊
...全文
相关推荐
Java HashSet集合存储遍历学生对象代码实例
主要介绍了Java HashSet集合存储遍历学生对象代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
为什么在重写 equals方法的同时必须重写 hashcode方法
Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的
详解Java中HashSet和TreeSet的区别
主要介绍了详解Java中HashSet和TreeSet的区别的相关资料,需要的朋友可以参考下
java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较
主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下
java中重写equals()方法的同时要重写hashcode()方法(详解)
下面小编就为大家带来一篇java中重写equals()方法的同时要重写hashcode()方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


Java SE
