zoukankan      html  css  js  c++  java
  • hashmap的hash方法为什么需要让高16位参与异或运算的原因

    原因:当数组的长度很短时,只有低位数的hashcode值能参与运算。而让高16位参与运算可以更好的均匀散列,减少碰撞,进一步降低hash冲突的几率。并且使得高16位和低16位的信息都被保留了。

    而在这里采用异或运算而不采用& ,| 运算的原因是 异或运算能更好的保留各部分的特征,如果采用&运算计算出来的值的二进制会向1靠拢,采用|运算计算出来的值的二进制会向0靠拢


    然后有不少博客提到了因为int是4个字节,所以右移16位。我打开hashmap的源码,找到hash方法,按住ctrl点击方法里的hashcode,跳转到Object类,发现hashcode的数据类型是int。int为4个字节,1个字节8个比特位,就是32个比特位,所以16很可能是因为32对半的结果,也就是让高的那一半也来参与运算所以选择了16。

    复习过程记录一下

    参考博客:

    https://blog.csdn.net/weixin_43842753/article/details/105927912

  • 相关阅读:
    前端:js
    HTML和CSS总结
    前端二:CSS
    前端一:走进HTML
    SQLALchemy(连表)、paramiko
    上下文管理、线程池、redis订阅和发布
    P4234 最小差值生成树
    P2387 [NOI2014]魔法森林
    P3721 [AH2017/HNOI2017]单旋
    P4271 [USACO18FEB]New Barns
  • 原文地址:https://www.cnblogs.com/skyvalley/p/14227702.html
Copyright © 2011-2022 走看看