java之Hashset分析手写去重的问题

本文详细解析了Java中Person类的hashCode与equals方法的实现,通过实例展示了如何正确覆盖这两个方法以确保对象的正确比较及HashSet集合的高效使用。

核心要素:
1、判断Hash值是否相等
2、判断地址值是否相等
其实不用手写,可以在eclise中右击选择source选择hashcode与equals选项然后,自动生成,其自动生成的代码更严谨一些,比手写要好的很多,但是原理要清楚明白,具体要素在代码中的注释中

package IO_liu;

import java.util.HashSet;

public class Person {
	String name;
	int age;
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	@Override
	public int hashCode() {
//		判断hash值是否相等
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
//		判断是否为空
		if (this == obj)
			return true;
		if (obj == null)
			return false;
//		提高健壮性,安全性
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
//		判断地址值是否相等
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}
package IO_liu;

import java.util.HashSet;

public class HashSetDemo3 {
	public static void main(String[] args) {
//		创建集合对象
		HashSet<Person> hs = new HashSet<Person>();
//		创建元素对象
		Person p = new Person("李四",18);
		Person p2 = new Person("张三",19);
		Person p3 = new Person("李四",18);
//		添加元素
		hs.add(p);
		hs.add(p2);
		hs.add(p3);
//		遍历集合对象,方式之一
		for (Person person : hs) {
			System.out.println(person);
		}
	}
	
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl精

面试很多问题,积攒不容易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值