jdk8 HashMap put方法里执行的动作

    技术2025-04-02  9

    1.如果HashMap未被初始化,则初始化 

    2.对key求Hash值(使用位未运算,效率高),然后再计算下标(使用取模运算%)

    3.如果没有碰撞,直接放入桶中(数组中)

    4.如果碰撞了,以链表的方式链接到后面

    5.如果链表长度超过了阀值8,就把链表转成红黑树

    6.如果链表长度低于6,就把红黑树转回链表

    7.如果节点已经存在就替换旧值(因key是用set进行存储的)

    8.如果桶满了(容量16*加载因子0.75),就需要resize(扩容2倍后重排)多线程环境下,调整大小会存在条件竞争,容易造成死锁,rehashing是一个耗时的过程 

    Processed: 0.013, SQL: 9