Java中的equals和hashcode

本文解释了在Java中为何需要重写equals和hashCode方法,尤其是在哈希集合中使用自定义对象作为键时的重要性。文章提供了重写这些方法的具体步骤,并强调了避免使用对象地址比较的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java中,当一个对象需要存放在集合对象中时,就需要重写equals和hashCode方法,尤其是hash类的集合(HashSet、hashmap等),那么为什么需要重写equals和hashcode两个方法呢?

java中规定两个对象equals相等则hashcode肯定相等,由于java中的所有对象均继承子Object类,故Sun JDK中在Object类里面定义了equals方法和hashcode方法.打开JDK源码:

 

public boolean equals(Object obj) {

return (this == obj);

    }

 public native int hashCode();


 

 

 可以看到在Object中,equals默认按对象的地址进行比较,而hashcode干脆采用了native声明,故如果我们不进行重写,当向hash集合中存放入我们自定义对象作为的key,然后再new同样的key就取不出相应的value(因为两个对象的地址不同,排除单例模式),这样就达不到我们预先的需求,所以我们应该为自己的自定义类重写equals和hashcode方法。

那么怎样重写equals和hashcode方法?

对于equals方法的重写,此处不再赘述,而hashcode方法的重写需要说明一下啊。

对于hashcode方法的重写,可以采用自定义类的某个属性进行重写,但最好不要是id属性;在effective Java一书中提到一下几个步骤:

1.给某个int型变量result赋上一个非零常量

2.为对象中某个有意义的属性计算出出一个hash码c

3.合并计算得到的散列码,如:

result = 37*result+c

4.返回result

5.检查hashCode()最后生成的结果,确保相同的对象有相同的散列码

 

 

以上就是对equals和hashcode使用方式的初略得不能再初略的分析,第一次发博,肯定写的不是很好,还请大牛们不要见怪!!!以后会及时更细一些自己学习当中有意义的心得,恳请大家赐教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值