java基础:hashSet如何检查加入集合的值是否重复:hashcode()和equals()

	当把对象加入HashSet时,集合会使用对象的hashCode值来判断对象加入的位置,但同时也会与其他已经加入HashSet集合的对象的hashCode值进行比较,如果没有相等的hashcode,则HashSet就会假设集合中没有要加入的对象。
	也就是说,如果hashcode值是相异的,则HashSet就会假设对象不可能是相同的。因此我们必须override过hashCode()方法来确保相同对象有相同的hashCode值。
	但有相同hashCode的对象也不一定相等,所以如果HashSet在集合中找到有与要加入的对象的hashcode相同的对象,则会调用其中一个的equals()方法来检查hashcode相等的对象是否真的相等。如果两者相同,则add()方法会返回false,表示添加失败。
	
	hashCode()与equals()的相关规定:
		1.如果两个对象相等,则hahcode值必须也相等。
		2.如果两个对象相等,则对其中一个对象调用equals()方法也必须返回true。
		3.如果两个对象有相同的hashcode,它们也不一定是相等的。但若两个对象相等,则他们的hashcode值一定是相等的。
		4.equals()的默认行为是执行==比较,也就是说会去测试两个引用是否是对heap上的同一个对象的引用,如果没有覆盖过equals(),则两个对象永远不会被视为相同的。
		a.equals(b)必须与a.hashCode()==b.hashCode()等值。
		但a.hashCode()==b.hashCode()不一定与a.equals(b)等值。
		也就是说hashcode是用来缩小寻找成本的,最后还要用equals()方法才能确定两个对象是否相等。
		![hashcode和equals的关系](https://img-blog.csdnimg.cn/20201002223321546.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhbGFiaWxpYg==,size_16,color_FFFFFF,t_70#pic_center)
		
		摘录自《Head First Java》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值