美文网首页
深入理解HashMap扩容

深入理解HashMap扩容

作者: 菜鸟程序员一枚 | 来源:发表于2019-01-30 11:55 被阅读8次

    看过HashMap源码的人(大神请忽略)可能会有些疑问,HashMap究竟什么时候扩容?扩容的条件是什么?好的,接下啦我给大家介绍一下HashMap扩容相关的一些参数。

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//默认的桶数组大小
    static final int MAXIMUM_CAPACITY = 1 << 30;//极限值(超过这个值就将threshold修改为Integer.MAX_VALUE(此时桶大小已经是2的31次方了),表明不进行扩容了)
    static final float DEFAULT_LOAD_FACTOR = 0.75f;//负载因子(请阅读下面体会这个值的用处)
    

    容量(capacity):HashMap中数组的长度
    加载因子(Load factor):HashMap在其容量自动增加前可达到多满的一种尺度,默认加载因子 = 0.75
    扩容阈值(threshold):当哈希表的大小 ≥ 扩容阈值时,就会扩容哈希表
    下面再用通俗一点的话说明一下
    我们都知道HashMap的初始值是16(1,<<4),负载因子0.75(听说这个值是经过大量实践算出来的,这个值设定最合理),初始值16指的是数组的长度(1<<4是2的4次方,这样写计算机执行更快),当数组的容量达到12(16*0.75)时,这时开始扩容,扩容为32(1<<5即2的5次方),每次扩容按照2的倍数递增,扩容是为了减少hash碰撞,让链表的数据更少(最好链表上就一个数据,即为数组的下标数据)

    相关文章

      网友评论

          本文标题:深入理解HashMap扩容

          本文链接:https://www.haomeiwen.com/subject/ojbqsqtx.html