hashmap put方法的流程
时间: 2024-02-19 11:17:59 浏览: 90
HashMap的put方法的具体流程如下:
1. 首先,根据key的hashcode值和HashMap的容量计算出该key在数组中的位置。
2. 如果该位置上没有元素,则直接将该元素插入到该位置上。
3. 如果该位置上已经有元素,则需要进行链表或红黑树的操作。
4. 如果该位置上的元素是链表,则遍历链表,查找是否有相同的key,如果有,则替换该key对应的value值,如果没有,则将该元素插入到链表的末尾。
5. 如果该位置上的元素是红黑树,则在红黑树中查找是否有相同的key,如果有,则替换该key对应的value值,如果没有,则将该元素插入到红黑树中。
6. 如果链表的长度大于等于8,则将链表转换为红黑树。
7. 如果HashMap的元素个数超过了负载因子*容量的阈值,则需要进行扩容操作。
8. 扩容操作会将原来的数组中的元素重新分配到新的数组中,重新计算每个元素在新数组中的位置。
9. 扩容操作完成后,再将新的元素插入到新数组中。
以上就是HashMap的put方法的具体流程。
相关问题
hashmap put方法流程
1. 首先,put方法接收两个参数:键和值。
2. 然后,通过键的hashCode方法计算出哈希值,根据哈希值确定存储位置。
3. 如果该位置没有元素,则直接将键值对存储在该位置。
4. 如果该位置已经有元素了,则需要判断待插入的键与已有键是否相等。
5. 如果相等,说明该键已经存在,将新值覆盖旧值即可。
6. 如果不相等,说明发生了哈希碰撞,需要使用链表或红黑树等数据结构来存储键值对。
7. 如果该位置存储的是链表,遍历链表找到待插入的键值对所在的节点,然后更新该节点对应的值。
8. 如果该位置存储的是红黑树,使用树节点的比较方法找到待插入键值对所在的节点,然后更新该节点对应的值。
9. 如果链表或红黑树的大小超过了阀值,就需要将它们转换为红黑树或者扩容哈希表,以提高查找效率。
10. 最后,put方法返回旧值,如果该键不存在则返回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 或旧的值,表示插入成功或替换成功。
阅读全文