HashMap的put过程
时间: 2023-11-17 11:06:17 浏览: 43
HashMap的put()方法实际上是将键值对存储在哈希表中。具体的过程为:
1. 首先,HashMap会根据key的hashcode值计算出该key在数组中的位置(即对应的桶)。
2. 如果该桶中还没有元素,则直接将该元素存储在该桶中。
3. 如果该桶中已经有元素,则需要进行链表或红黑树的操作:
- 如果该桶中的元素数量小于等于8个,则继续将新元素插入到链表中。
- 如果该桶中的元素数量大于8个,则将链表转化为红黑树,并将新元素插入到红黑树中。
4. 如果插入新元素后,该桶中的元素数量超过了阈值(默认为0.75),则需要进行扩容操作。具体操作为:创建一个新的数组,将原数组中的元素重新分配到新数组中。
5. 最后,将新元素放入到对应的桶中,并返回旧值(如果该key已经存在于HashMap中)或null(如果是新的key)。
以上就是HashMap的put()方法的过程。
相关问题
hashmap put过程
HashMap的put过程如下:
1. 首先,根据传入的key通过哈希函数计算其哈希值。
2. 然后,通过哈希值找到对应的桶(bucket)。
3. 如果桶中没有元素,将该元素添加到桶中,并返回null。
4. 如果桶中已经存在元素,则将新元素与桶中的元素比较。如果两个元素的key相同,则用新元素的value替换旧元素的value,并返回旧元素的value。如果key不同,则将新元素添加到桶中,并返回null。
5. 如果桶中元素的数量达到了负载因子(load factor)所规定的阈值,那么就需要将HashMap的容量扩大。在扩容的过程中,HashMap会重新计算每个元素的哈希值,并将它们分配到新的桶中。这个过程可能会比较耗费时间,因此应该尽量避免频繁扩容。
6. 如果发生了哈希冲突,即两个不同的key计算得到的哈希值相同,那么HashMap会使用链表或红黑树等数据结构来存储这些元素。
7. 最后,put方法返回旧元素的value或null。
hashmap put 过程
HashMap的put()方法用于将键值对存储到HashMap中。其过程如下:
1. 首先,根据键的hashCode()方法计算出哈希值,再通过哈希值和HashMap中的数组长度取模,得到该键值对在数组中的下标位置。
2. 如果该下标位置还没有元素,直接将该键值对存储在该位置上。如果该下标位置已经有元素,则需要进行链表或红黑树的操作。
3. 如果该下标位置是一个链表,则需要遍历链表,查找是否已经存在该键。如果存在,则用新值替换旧值。如果不存在,则将该键值对添加到链表的末尾。
4. 如果该下标位置是一个红黑树,则需要按照红黑树的规则进行添加或替换操作。
5. 在进行链表或红黑树的操作之后,如果链表长度或红黑树节点数达到阈值,就需要将链表转换为红黑树或进行红黑树的平衡操作,以保证HashMap的性能。
6. 最后,如果添加了新元素,则需要将HashMap的size属性加1,表示HashMap中元素的个数增加了。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)