重写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方法了。

java 重写hashset的hashcode方法和equals方法_System

重写后的hashcode方法和equals方法如下图所示

如果想要比较的是对象的值 则需要重写equals方法,而在重写equals方法之前 一定要先重写hashCode方法 否则equals没用

java 重写hashset的hashcode方法和equals方法_开发语言_02

重写后,代码运行结果如下,可以看到,名字相同的对象没有重复存储

java 重写hashset的hashcode方法和equals方法_开发语言_03