HashCode

HashCode

什么是HashCode和HashCode()的作用
HashCode是Object类中的native本地方法,是用c/c++语言编程实现的,是用于获取该对象的哈希码的。
HashCode哈希码是某对象的内存地址通过哈希算法得到的数值,对应的着该对象在哈希表的位置,一般用于对象的快速查找的便捷性,可以方便的定位出某一对象的内存地址。

  • 用于比较两个对象时,先可以进行两个对象的HashCode进行比较,避免了equals()方法的频繁使用,提高性能。

为什么要有HashCode?
此处使用 HashSet如何避免重复对象添加来说明:

  • 当往HashSet集合里面添加对象是,会首先获取该对象的HashCode值,通过计算获取该对象加入的位置,同时与已经加入HashSet集合的对象的HashCode值进行比较。
  • 当比较不同时,HashSet集合会假设两个对象不相同,正常添加到集合里面;当HashCode比较相同时,会再使用equals()方法进行比较,看是否两个对象相同。
  • 当两个都相同时,HashSet集合将不添加此对象,如果两者不相同,则将该对象散列到其他位置
  • 并且大大减少了equals()方法时重复使用,提高了执行速度。

重写equals()方法时为什么要重写HashCode()方法?

  • HashCode()和equals()方法之间的关系应该符合:

1.当两个对象相同,(使用equals方法返回true),它们对应的HashCode也应该相同。
2.如果两个对象的HashCode相同,它们并不一定相同(使用equals()方法)。

综上述说:在覆盖了equals()方法的类上,也一定会覆盖HashCode()方法,否则会违背Object.HashCode的通用规则,导致该类不能与基于散列的集合一起正常运行;例如HashTable、HashMap、HasHSet.
----------另外,可以避免equals方法的多次使用,减少性能开销。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值