hashMap中的位运算

HashMap中的位运算

1. 下标的计算

`getIndex() = (tab.length-1 ) & hash `

举例

    tab.length = 8 ,  二进制 1000  
    tab.length-1 = 7  二进制 0111

    在计算 & 时, 只会比较 两个二进制数 同时为1 则为1 , 即 getIndex() 方法 能够最大得到的下标位 就是7。 
    一个二进制 0111  , 在与 另一个二进制值计算, 不管另一个值是多少 , 都能获取一个  0-7的数字。 即求出下标位。
  1. 扩容的计算。

    resize() = (oldCap & e.hash)

举例,

    oldCap = 8 ,  e.hash = {0..100}

    e.hash=1时。二进制 0001
    8的二进制 1000
    进行 & 运算 0 

    e.hash=2时。二进制 0010
    8的二进制 1000
    进行 & 运算 0 

    
    。。。。。。


    e.hash=8时,二进制 1000
    8的二进制 1000
    进行 & 运算 8

    e.hash=9时,二进制 1001
    8的二进制 1000
    进行 & 运算 8

    。。。。。。


    计算结果为0 时,下标位为低位,放在未扩容的链表区域
    计算结果不为0时,下标位为高位,放在扩容的链表区域

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容