HashMap 中 Node 节点的 hashCode()

yin__ren 2019-05-28 06:16:31
HashMap 中 Node 节点的 hashCode() 算法为什么是 key 与 value 的异或

public final int hashCode()   { return key.hashCode() ^ val.hashCode(); }


这样的异或是可以提高效率,还是因为别的什么原因

注:请不要答非所问,欢迎发言
...全文
481 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
callanhan 2021-03-19
  • 打赏
  • 举报
回复
我现在也太知道给node算hash值的目的,我感觉可能真的没有机会会用这个吧? 但是我能回答你第二个问题,首先异或使用二进制直接计算效率高。 其次,异或可以尽量的保留两部分的数据信息,我觉得这和hash算法中先位移16位再异或的目的相同。 异或的结果是1和0的概率相同,并且可以使用两个数据一起计算。但是您后面提到的与,非运算都不满足。
imiMi_ 2019-06-11
  • 打赏
  • 举报
回复
与或运算会屏蔽掉对方,非运算是单目运算更不用提了,这个你写一下就明白了,与运算的话有一个为0另一个就没用了,或运算有一个为1另一个也是没用了的,这样生成的hashCode相同的概率是比异或运算大的。
yin__ren 2019-06-05
  • 打赏
  • 举报
回复
请问,为什么异或可以尽可能生成不同的 hashCode?与、非 等运算呢
imiMi_ 2019-06-05
  • 打赏
  • 举报
回复
这样写对于提高HashMap这一数据结构没有效率的提升。 Node类是重写了equals的。由于异或可以充分利用key、value的每一位数据,key、value做异或是为了保证在两个Node比较不相等的情况下尽量生成不同的hashCode。至于为什么两个对象不同需要尽量生成不同的hashCode,是易于在散列表中查找该对象,与HashMap的hash方法尽量返回不同的hash值是一个道理。

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧