重写hashset的hashcode方法和equals方法
为什么需要重写?
我们一起来看一个例子
import java.util.HashSet;
public class TestHashSet2 {
public static void main(String[] args) {
HashSet<Person> hashSet=new HashSet<Person>();
//如果我比较的不是两个对象是否相同,而是比较两个对象的name是否相同 不让存进去 怎么办?
//如果想要比较的是对象的值 则需要重写equals方法,而在重写equals方法之前 一定要先重写hashCode方法 否则equals没用
hashSet.add(new Person("zhangsan", 18));
hashSet.add(new Person("lisi", 23));
hashSet.add(new Person("zhangsan",18));
System.out.println(hashSet);
}
}
重写hashcode方法和equals方法之前,我们运行的代码,得到的截图如下图,可以看到,张三重复存储了两次。如果我们想让名字相同的对象只存储一次,该怎么办呢?这时候就需要重写hashcode方法和equals方法了。
重写后的hashcode方法和equals方法如下图所示
如果想要比较的是对象的值 则需要重写equals方法,而在重写equals方法之前 一定要先重写hashCode方法 否则equals没用
重写后,代码运行结果如下,可以看到,名字相同的对象没有重复存储