hashmap什么时候转红黑
时间: 2023-08-24 19:43:28 浏览: 46
HashMap在插入键值对的时候,会根据键的哈希值计算出在数组中的位置,如果该位置上已经存在了一个或多个键值对,那么它们会以链表的形式存储在该位置上。当链表上的节点数达到了一个阈值(默认为8),且当前HashMap的容量大于等于64时,就会将链表转化为红黑树,这样可以提高查找、插入和删除操作的效率。
将链表转化为红黑树的过程,需要对链表上的节点进行排序,然后将排序后的节点依次插入到红黑树中。如果插入节点后,红黑树的高度超过了一定的阈值(默认为6),就会自动将红黑树转化为链表,以避免过深的树结构影响性能。当然,如果节点数又达到了阈值,就又会将链表转化为红黑树,如此往复,以保持HashMap的高效性。
总之,HashMap将链表转化为红黑树的条件是:链表上的节点数达到一定阈值,且当前HashMap的容量大于等于64;红黑树转化为链表的条件是:红黑树的高度超过一定阈值。
相关问题
hashmap什么时候转换为红黑二叉树
在 Java 8 中,当一个 `HashMap` 中的元素数量超过了 `TREEIFY_THRESHOLD = 8` 且桶的数量大于 `MIN_TREEIFY_CAPACITY = 64` 时,`HashMap` 会将链表转换为红黑树,以提高查询效率。当元素数量小于 `UNTREEIFY_THRESHOLD = 6` 时,`HashMap` 会将红黑树转换为链表,以节省内存空间。
hashmap中链表转红黑树
在 HashMap 中,当链表中的元素数量达到一定阈值时,会考虑将链表转换为红黑树,以提高查找和删除操作的性能。这个阈值在 JDK 中默认为8。
链表转换为红黑树的过程如下:
1. 首先,检查当前链表的长度是否满足转换为红黑树的条件。如果链表长度小于等于阈值,则不进行转换。
2. 如果链表长度大于阈值,则创建一个新的红黑树节点,并将链表中的元素逐个插入到红黑树中,同时从链表中移除。
3. 插入到红黑树中的元素会按照键的哈希值进行排序,并按照红黑树的插入规则进行平衡。
4. 在插入过程中,如果红黑树的节点数量超过了链表的长度,则会将红黑树节点中的元素转换回链表形式。
这样,当进行查找或删除操作时,可以利用红黑树的平衡性质,使得这些操作的时间复杂度为 O(log n),而不是链表的线性时间复杂度 O(n)。
需要注意的是,在 JDK 8 中,当红黑树节点数量小于等于6时,会将红黑树重新转换回链表形式,以避免红黑树的高度过大带来的额外开销。这样,在节点数量较少的情况下,依然可以保持较高的性能。