20230616重写hashcode和equals方法

文章讨论了在Java中使用HashMap时可能出现的hash冲突问题,强调了当使用自定义对象作为key时,需要重写equals()和hashcode()方法以确保正确的行为。例如,两个内容相同的User对象在内存中地址不同,如果不重写,将被视为不同的key。作者建议根据业务逻辑,如用户ID,来确定hashcode()的返回值,以解决冲突。此外,指出通常使用已重写这些方法的String对象作为key是安全的。

为了解决hash冲突做的。个人感觉用到的很少。

以HashMap举例。hashcode()和equals()方法都是object的方法。当我们使用某个自定义对象当key的时候。就会有问题。new两个user对象u1和u2,内容完全一样,但是在堆里存储的地址肯定不一样。所以如果不重写hashcode()和equals()的时候肯定就只能当2个key类使用,但是他们的内容一样,有可能业务上认为是一个。所以就要重写这两个方法。保证u1.equals(u2)=true。然后hashcode()就不能返回u1或者u2对象的code了。看业务逻辑应该返回user对象.用户id的code。这样u1的用户id和u2的用户id返回的code肯定就一样了。这样就能保证一个用户就算有两个对象。也能判断是true。

个人觉得HashMap一般是string为key。string已经重写好了equals方法和hashcode方法了。所以直接用就好了。

注意:分清楚是object的方法要重写。不是string的方法要重新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值