hashmap put过程
时间: 2023-11-08 09:23:53 浏览: 49
HashMap的put过程如下:
1.将key和value封装到一个Entry对象中。
2.通过hash算法计算出key在数组中的位置,如果该位置没有元素,则直接将Entry对象放入该位置。
3.如果该位置已经有元素,则遍历该位置上的链表,如果链表中的某个元素的key和当前要插入的key相同,则更新该元素的value值,否则将Entry对象添加到链表尾部。
4.如果链表长度超过阈值(默认为8),则将该位置上的链表转换为红黑树。
5.如果桶数组中元素数量超过负载因子(默认为0.75),则扩容。
6.插入完成后,更新modCount(修改次数),同时判断是否需要进行rehash操作。
7.返回null或者旧的value值。
相关问题
hashmap put 过程
HashMap的put()方法用于将键值对存储到HashMap中。其过程如下:
1. 首先,根据键的hashCode()方法计算出哈希值,再通过哈希值和HashMap中的数组长度取模,得到该键值对在数组中的下标位置。
2. 如果该下标位置还没有元素,直接将该键值对存储在该位置上。如果该下标位置已经有元素,则需要进行链表或红黑树的操作。
3. 如果该下标位置是一个链表,则需要遍历链表,查找是否已经存在该键。如果存在,则用新值替换旧值。如果不存在,则将该键值对添加到链表的末尾。
4. 如果该下标位置是一个红黑树,则需要按照红黑树的规则进行添加或替换操作。
5. 在进行链表或红黑树的操作之后,如果链表长度或红黑树节点数达到阈值,就需要将链表转换为红黑树或进行红黑树的平衡操作,以保证HashMap的性能。
6. 最后,如果添加了新元素,则需要将HashMap的size属性加1,表示HashMap中元素的个数增加了。
hashmapput的过程
HashMap的put方法实际上是将key和value存储到HashMap中,过程如下:
1. 首先,将存储的key通过hash函数计算出其在数组中的位置,即“hash值”(HashMap底层使用数组实现)。
2. 如果该位置没有元素,直接将key-value存储在该位置。
3. 如果该位置已经有元素,则需要进行以下操作:
- 如果该位置上已经存储了一个key-value对,且该key-value对的key与当前存储的key相同,则将该位置上的value更新为当前存储的value。
- 如果该位置上已经存储了一个key-value对,但是该key-value对的key与当前存储的key不同,则需要进行“链式存储”。
链式存储是指在该位置上维护一个链表,将所有hash值相同的key-value对存储在同一个链表中。新的key-value对将被加入到该链表的末尾。
4. 如果链表长度超过了阈值,则需要将该链表转化为红黑树,以提高查找效率。
总之,HashMap的put方法是一个比较复杂的过程,需要考虑多种情况,包括hash值冲突、链式存储、红黑树转化等。
阅读全文