30
2020
01

HashMap

 1. 数组 + 链表方式存储


    1. 默认容量: 16(2^n 为宜,若定义的初始容量不是 2^n,容量会定义为大于该初始容量的最小 2^n)


        - 例如:初始容量为 13,则真正的容量是 16.


    1. put:


        1. 索引计算 : ((key.hashCode() ^ (key.hashCode() >>> 16)) & (table.length - 1))


        1. 在链表中查找,并记录链表长度,若链表长度达到了 TREEIFY_THRESHOLD(8),则将该链转成红黑树。


        1. 若在链表中找到了,则替换旧值,若未找到则继续


        1. 当总元素个数超过容量*加载因子时,扩容为原来 2 倍并重新散列


            - (元素的下标要么不变,要么变为【原下标+原容量】)。


        1. 将新元素加到链表尾部


        1. 线程不安全

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。