自定义集合HashCode和equals方法重写

        HashSet 存储的数据是无序,不重复的,原因是因为每个字符有其对应的 hashCode 值。然而,我们在 HashSet 集合中存储自定义对象时,每 new 出来一个对象在我们的 Java 内存中是不同的,但是 HashSet 集合存储的是不重复的,为了解决这个矛盾,我们需要重写 hashCode 和 equals 方法进行判断是否存在相同的数据存在。

自定义 Person 类:

public class Person {
	private String name;
	private Integer age;
	
	/**
	 * 重写hashCode方法
	 * */
	public int hashCode(){
		return name.hashCode() + age*2;
	}
	/**
	 *  重写 equals方法
	 * */
	public boolean equals(Object obj){
		if( this == obj){
			return true;
		}
		if( obj == null){
			return false;
		}
		if(obj instanceof Person){
			Person p = (Person)obj;
			
			return name.equals(p.name) && age==p.age;
		}
		return false;
	}
	
	public Person() {
		super();
	}
	public Person(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return name + "....." + age;
	}

测试类:

public static void main(String[] args) {
		HashSet<Person> hashPersons = new HashSet<Person>();
		hashPersons.add(new Person("a",10));
		hashPersons.add(new Person("a",10));
		hashPersons.add(new Person("abc",10));
		hashPersons.add(new Person("abc",11));
		System.out.println(hashPersons);
	
	}
如果不重写 hashCode 和 equals 方法,会有相同的 name = "a",age = 10 打印出来;重写之后,我们就把重复的数据进行筛选了出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值