JAVA重写hashcode和equals的重要性

 引言

本文不对重写hashcode和equals方法的具体实现做出解释,仅仅阐述重写俩种方法的必要性

首先我们要清楚,一个对象在内存中存放的地址是唯一

其次我们要清楚,哈希码不同的对象肯定不是同一个对象!但不同对象的哈希码可能会一样,不同对象通过同一哈希码确定的在集合中存放的位置可能会一样,从而产生哈希冲突,也叫哈希碰撞

再次我们要清楚,重写equals方法后可以判定出两个地址不同但内容相同的对象;重写hashcode方法后可以令两个地址不同但内容相同的对象的哈希码一致,进而使内容相同的对象隶属于同一集合索引位!

 正文开始

我们以两个内容相同的字符串来举例吧

String s1=new String("hello")
String s2=new String("hello")

我们的目的是把"hello"放到Hashset集合里面,HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合

这时候假设我们先把s1放到Hashset里面。其实已经达到了我们的目的,但是为了验证元素的唯一性,展开试验

那么对于是否重写hashcode和equals就会有下面四种情况发生

情况1:既没有重写hashcode也没有重写equals

我们知道S1和S2是2个对象࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值