hashmap的put流程
时间: 2023-11-28 22:40:37 浏览: 55
HashMap的put流程如下:
1. 首先,根据要插入的key计算出hash值。
2. 根据hash值通过一个算法(如取模运算)找到数组中的对应位置,这个位置称为桶(bucket)。
3. 如果该桶为空,直接将(key, value)作为一个Entry插入到该桶中,并返回null。
4. 如果该桶不为空,则遍历该桶中的所有Entry,找到与key相等的Entry。
- 如果找到了相等的key,将该Entry的value替换为新的value,并返回旧的value。
- 如果没有找到相等的key,将(key, value)作为一个新的Entry插入到该桶的链表或红黑树的末尾。
(HashMap采用链表和红黑树结合的方式处理哈希冲突,链表用于较短的链表,红黑树用于较长的链表,提高查找效率)
如果链表长度达到了阈值(默认为8),链表将被转换为红黑树。
如果桶内的元素数量超过了阈值(默认为64),则会触发扩容操作。
5. 插入完成后,返回null。
相关问题
hashmapput流程
HashMap 的 put 方法主要分为以下几个步骤:
1. 计算 key 的 hash 值并确定其在数组中的索引位置。
2. 如果该位置上没有元素,则直接将该键值对插入到该位置。
3. 如果该位置上已经有元素,则需要进行冲突解决,通常使用链表或红黑树来解决冲突。如果该位置上的元素数量小于等于 8 个,则使用链表来存储,否则使用红黑树。
4. 如果该键已经存在,则使用新的值替换旧的值,并返回旧的值。
具体流程如下:
1. 调用 key 的 hashCode() 方法计算出 hash 值。
2. 根据 hash 值计算出在数组中的索引位置。
3. 如果该位置上没有元素,则直接将该键值对插入到该位置。
4. 如果该位置上已经有元素,则需要进行冲突解决。如果该位置上的元素数量小于等于 8 个,则使用链表来存储,否则使用红黑树。
5. 如果该键已经存在,则使用新的值替换旧的值,并返回旧的值。
6. 如果数组中的元素数量超过了负载因子(默认为 0.75),则需要进行扩容。
7. 扩容时会重新计算每个元素的 hash 值和索引位置,并将它们插入到新的数组中。
8. 返回 null 或旧的值,表示插入成功或替换成功。
hashmap put方法流程
1. 首先,put方法接收两个参数:键和值。
2. 然后,通过键的hashCode方法计算出哈希值,根据哈希值确定存储位置。
3. 如果该位置没有元素,则直接将键值对存储在该位置。
4. 如果该位置已经有元素了,则需要判断待插入的键与已有键是否相等。
5. 如果相等,说明该键已经存在,将新值覆盖旧值即可。
6. 如果不相等,说明发生了哈希碰撞,需要使用链表或红黑树等数据结构来存储键值对。
7. 如果该位置存储的是链表,遍历链表找到待插入的键值对所在的节点,然后更新该节点对应的值。
8. 如果该位置存储的是红黑树,使用树节点的比较方法找到待插入键值对所在的节点,然后更新该节点对应的值。
9. 如果链表或红黑树的大小超过了阀值,就需要将它们转换为红黑树或者扩容哈希表,以提高查找效率。
10. 最后,put方法返回旧值,如果该键不存在则返回null。