hashmap put过程
时间: 2023-11-08 08:25:53 浏览: 93
HashMap put方法的基本过程如下:
1. 首先,计算key的哈希值。
2. 然后,通过哈希值和HashMap的容量计算出key的存储位置。
3. 如果该位置上已经有元素,那么就遍历该位置上的元素,如果找到了key相同的元素,则用新的value替换原来的value,并返回原来的value。
4. 如果该位置上没有元素,那么就直接把新的key-value对插入到该位置上。
5. 如果插入新的key-value对之后,HashMap的size超过了threshold(即容量的75%),那么就需要进行扩容操作。
6. 扩容操作会创建一个新的数组,将原来的元素重新哈希并插入到新的数组中,同时更新HashMap的capacity、threshold和table等属性。
注意事项:
1. HashMap的key和value都可以为null,但是需要注意的是,如果key为null,则它的哈希值为0,而在HashMap中,0是一个有效的哈希值,因此,null key会被存储在table[0]的位置上。
2. 如果多个key的哈希值相同,那么它们会被存储在同一个位置上,这种情况下,会使用链表或红黑树等数据结构来存储这些元素。
3. 在多线程环境下,HashMap并不是线程安全的,因此,在并发访问HashMap时,需要使用线程安全的Map实现,比如ConcurrentHashMap。
相关问题
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值冲突、链式存储、红黑树转化等。
阅读全文