码迷,mamicode.com
首页 > 其他好文 > 详细

为什么HashMap建议初始化容量,且容量为2的次幂?

时间:2020-04-02 01:22:59      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:机制   重建   factor   一个   初始   导致   return   性能   table   

HashMap有扩容机制,就是当达到扩容条件时会进行扩容。HashMap的扩容条件就是当HashMap中的元素个数(size)超过临界值(threshold)时就会自动扩容。在HashMap中,threshold = loadFactor * capacity

每次扩容会重建hash表,导致性能下降。

默认情况下,当我们设置HashMap的初始化容量时,实际上HashMap会采用第一个大于该数值的2的幂作为初始化容量。

计算hashMap容量的阈值:

static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }

 <<左移*2,右边补0

>>右边移/2,左边补符号位,符号位是0就补0,是1就补1

>>>无符号右移,全补0

为什么HashMap建议初始化容量,且容量为2的次幂?

标签:机制   重建   factor   一个   初始   导致   return   性能   table   

原文地址:https://www.cnblogs.com/akaneblog/p/12616982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!