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

  • 相关阅读:
    Ambari 整体架构
    Ambari 介绍
    xcode工程命令行生成ipa安装包
    gradle打包java项目
    FreeMarker标签介绍
    P与NP,从概念到研究全面综述
    计算机领域经典笑话
    自己动手写GC
    编程语言简史
    不第后赋菊
  • 原文地址:https://www.cnblogs.com/skyvalley/p/14227702.html
Copyright © 2011-2022 走看看