您的位置:首页 > 其它

HashMap集合源码以及底层结构解析(何时数组+单项链表变为数组+红黑二叉树)

2018-03-17 00:20 483 查看
当开始创建集合时,调用构造器,此时会对加载因子初始化



当首次调用put方法添加元素时



*注意:这里的hash值不是原始值返回的,而是算出key的hash值后和0无符号右移16位后的值进行异或运算





*然后进入resize方法





到这里resize方法就对table进行了初始化,容量16,临界值12





在后面的添加过程中,可能会用到下面else里面的添加方法,这里就不细说了,可以简单看下,然后记住后面的小结部分内容好好体会



小结:首次添加元素时,初始化的三个参数分别为:临界值12(16*0.75),数组长度(文中的容量)16以及加载因子0.75。当添加的元素的hash值与之前的有重复时,会进行内容对比(equals),如果一样,则会覆盖之前的内容,不一样则会加到上个元素的后面。
情况一:当总共元素个数大于临界值时,会以2倍的数量对数组容量扩容。
情况二:当单个链表中的元素个数大于8时,会以2倍的数量对数组容量扩容(每增加1个就会扩容一次)。
注意:当1、数组容量达到64。2、单向链表的元素个数达到8个时,HashMap底层结构会由【数组+单向链表】变成【数组+红黑二叉树】
极限情况:当所有的元素hash值都相同,都放到了一个链表,当放到第9个时,容量变为32,当放入第10个时,容量变为64,当放到第11个时,底层结构开始发生变化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息