首页文章正文

hashmap链表转红黑树的条件,hash冲突的解决方法

hashmap扩容两个条件 2023-11-17 15:35 215 墨鱼
hashmap扩容两个条件

hashmap链表转红黑树的条件,hash冲突的解决方法

hashmap链表转红黑树的条件,hash冲突的解决方法

HashMap的数组容量总是2的N次方。 因为当数组容量为2的N次方时,hash()方法计算出的哈希值直接进行(数组容量-1)&(位与)运算,得到数组中元素的下标。 3.2HashMap链表升级为红黑树的条件(源码分析)条件链表长度大于8,隐式条件是Node数组不为空且Node数组长度大于等于64(不满足则进行扩容,而不是升级)源码

HashMap的底层是一个数组,其元素是链表。 转换条件JDK1.8以后,HashMap中的链表满足以下两个条件时会转换为红黑树(即自平衡排序二叉树):1.条件1存储datarrayarr[i],当链表中的元素个数大于8时,HashMap不一定要转换为红黑树,而是先考虑扩展,然后再转换扩展达到默认限制。2.hashMap的红黑树不一定小于6才会转换为链表。 ,但仅在调整大小之后

●﹏● 将红黑树转换为链表的条件是:1.树中的所有节点必须是叶节点,即没有子节点。 2.节点的颜色必须是黑色。 3.所有节点必须按升序排列键值。 4.所有节点必须满。简而言之,将hashmap链表转换为红黑树的条件是hashmap节点数量超过阈值。 红黑树比普通链表有更好的性能,而且它们还避免了链表搜索性能严重下降的风险。在某种程度上,它们可以更好

当链表长度大于等于TREEIFY_THRESHOLD(默认8),且链表长度大于等于MIN_TREEIFY_CAPACITY(默认64)时,会触发链表转换为红黑树。当然,当删除(remove)数据后调整大小或其他原因时,当红黑树节点小于1时。s8且数组长度(数据总量)超过64,将转换为红黑树。 2.在将链表转换为红黑树之前,会进行判断,如果当前数组的长度小于64,则先对数组进行扩容,而不是转换为红黑树,以减少搜索时间。 2.HashMap

要将链表转换为红黑树,需要满足两个条件:链表中的节点数(包括新节点)大于或等于树阈值(查看源码可知putVal方法大于或等于树阈值,而其他方法均大于或等于树阈值)。 HashMap的容量(Node数组的长度)大于等于正常情况下,如果hashal算法不正常,链表的长度不会很长,红黑树不会带来明显的查询时间优势,反而会增加空间负担。 。 所以一般不需要转换成红黑树,所以概率很小,不到千万。

后台-插件-广告管理-内容页尾部广告(手机)

标签: hash冲突的解决方法

发表评论

评论列表

黑豹加速器 Copyright @ 2011-2022 All Rights Reserved. 版权所有 备案号:京ICP1234567-2号