Hashmap的put的底层原理
HashMap
的put
方法主要用于向HashMap
中添加键值对。其具体流程如下:
-
首先,根据键的
hashcode
计算出在HashMap
内部数组中的索引位置。 -
然后,检查该位置是否已经存在其他元素,如果不存在,则直接将新的键值对存储在该位置。
-
如果该位置已经存在其他元素(可能是单个元素或者链表、红黑树等数据结构),则需要比较键的
hashcode
和实际值来判断是否是同一个键。若为同一个键(遍历链表或者红黑树就可以判断key是否重复),则覆盖原先的value值,如果不是同一个键,且发生了碰撞(即多个键映射到了同一个索引位置),则根据具体情况采取不同的解决方案:
-
如果发生了碰撞且使用的是链表存储冲突元素,会将新元素追加到链表末尾;
-
如果发生了碰撞且链表长度超过阈值,会将链表转换为红黑树存储冲突元素;
-
如果发生了碰撞且使用的是红黑树存储冲突元素,会按照红黑树的规则进行插入操作。
- 最后,如果插入成功,则更新
size
计数器,并根据需要进行扩容操作。 - size为数组中真正存在的键值对数目
若size超过数组大小*加载因子,则进行扩容操作
以上就是HashMap
的put
方法的大致流程。