hashmap添加元素的过程
时间: 2023-11-11 19:56:19 浏览: 50
HashMap的添加元素过程如下:
1. 根据键的hashCode值计算hash值,通过hash函数得到对应的桶的索引。
2. 如果该桶为空,则直接将键值对添加到该桶中,并更新HashMap的size。
3. 如果该桶不为空,则遍历该桶中的链表或红黑树,判断是否存在相同的键。如果存在相同的键,则更新对应的值;如果不存在相同的键,则将新的键值对添加到链表或红黑树的末尾。
4. 如果添加完键值对后,链表或红黑树的长度达到阈值(默认为8),则将链表转化为红黑树(如果链表的长度大于64,则进行树化操作,否则进行扩容操作)。
5. 如果添加元素后,HashMap的size超过了负载因子(默认为0.75)与当前容量的乘积,则进行扩容操作,将HashMap的容量扩大为原来的两倍,并重新计算每个键值对的在新容量下的桶索引。
相关问题
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中元素的个数增加了。