HashMap的put方法的具体流程
时间: 2023-05-25 09:06:03 浏览: 89
HashMap的put方法的具体流程如下:
1. 首先根据key的哈希值计算出在数组中的位置(下标),如果该位置没有元素,则直接将key-value存入该位置。
2. 如果该位置已经有元素了,则需要判断当前元素的key是否与要插入的元素的key相等。
3. 如果相等,则说明这个位置已经存在一个相同的key,那么直接将value替换掉即可。
4. 如果不相等,则需要遍历该位置的链表或红黑树(HashMap在JDK1.8之后的实现中改为了使用红黑树来存储链表过长的元素),找到与要插入元素key相等的节点。
5. 如果找到了相同的key,则更新该节点的value。
6. 如果没有找到相同的key,则将新节点插入到链表或红黑树中。
7. 如果链表过长(超过8个元素)则将链表转换为红黑树,以提高元素查找效率。
8. 如果插入一个新节点导致HashMap的容量达到了负载因子(默认是0.75)的阈值,则需要进行扩容操作。
9. 扩容操作会新建一个容量为原来两倍的数组,将所有元素重新插入到新数组中,并且重新计算每个元素在数组中的位置。
相关问题
hashmap put方法的流程
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方法
HashMap的put方法是用来将键值对存储到HashMap中的。在put方法中,首先通过hash(key)计算出要存储的位置,然后调用putVal方法来实际执行插入操作。\[1\]
在putVal方法中,首先判断要插入的位置是否已经存在元素。如果该位置为空,则直接将键值对存储在该位置上。如果该位置已经存在元素,则需要根据具体情况进行处理。
如果该位置上的元素是一个链表,则需要遍历链表,查看是否存在与要插入的键相同的键。如果存在相同的键,则更新对应的值;如果不存在相同的键,则将新的键值对添加到链表的末尾。同时,还需要判断链表的长度是否达到了阈值,如果达到了阈值,则将链表转换为红黑树。\[2\]
如果该位置上的元素是一个红黑树节点,则将要插入的键值对封装成一个红黑树节点,并添加到红黑树上。在添加过程中,还会判断红黑树中是否已经存在相同的键,如果存在,则更新对应的值。\[3\]
总结起来,HashMap的put方法会根据键的哈希值计算出存储位置,然后根据具体情况进行插入操作,包括直接存储、链表插入和红黑树插入。
#### 引用[.reference_title]
- *1* *2* [HashMap中put方法详解](https://blog.csdn.net/lubiaojava/article/details/119780055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [HashMap的put方法](https://blog.csdn.net/AAAWell/article/details/125898104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文