java中重写equals和hashCode方法

为什么要重写equals和hashCode方法

1.需要将对象放入HsahMap、HashSet等集合中的类需要重写HashCode和equals()方法:

Hashcode在基于key-value的集合如:HashMap、LinkedHashMap中扮演很重要的角色。此外在HashSet集合中也会运用到,使用合适的hashcode方法在检索操作时的时间复杂度最好的是 O(1).

hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。

hashCode()方法被用来获取给定对象的唯一整数。这个整数被用来确定对象被存储在HashTable类似的结构中的位置。默认的,Object类的hashCode()方法返回这个对象存储的内存地址的编号。

参考Josh Bloch的书《Effective Java》,一个好的hashcode方法通常最好是不相等的对象产生不相等的hash值,理想情况下,hashcode方法应该把集合中不相等的实例均匀分布到所有可能的hash值上面。

补充一个类似的:什么时候类需要实现Serializable接口:当某个类的实体对象需要持久化到硬盘,或通过网络传输数据
2. 对于对象中的每个域,hashCode值遵循以下原则

为该域计算int类型的哈希值hc:

  • 如果是boolean类型,计算(f?1:0)
  • 如果是byte、char、short或者int类型,计算(int)f
  • 如果是long类型,计算(int)(f^(f>>>32))
  • 如果是float类型,计算Float.floatToIntBits(f)
  • 如果是double类型,计算Double.doubleToLongBits(f),然后重复第三个步骤。
  • 如果是一个对象引用,并且该类的equals方法通过递归调用equals方法来比较这个域&#
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值