HashMap内部数组长度为什么是2的幂次

  • 用&运算代替%运算,若不为2的幂次,内部数组会存在浪费

    index = (tab.length - 1) & hash

    此处输入图片的描述

    若不为2的幂次,则减一后低位必存在0,这样相与后该位结果为0,那么在该位上为1的索引永远用不到,数组存在浪费

  • 扩容时,方便定位

    此处输入图片的描述

    当相与的该位(图中橘色的X)
    当相与的该位为0时,则结果不变,扩容后索引值不变
    当相与的该位为1时,则结果为原索引值加原数组长度

posted @ 2019-11-01 17:47  HanYu-chn  阅读(1122)  评论(0)    收藏  举报