首页文章正文

hashmap为什么是8转为红黑树,redis 缓存穿透,击穿,雪崩

hashmap链表转红黑树的条件 2023-11-13 16:04 923 墨鱼
hashmap链表转红黑树的条件

hashmap为什么是8转为红黑树,redis 缓存穿透,击穿,雪崩

hashmap为什么是8转为红黑树,redis 缓存穿透,击穿,雪崩

本文我们来看看红黑树的设计。相比jdk1.7的HashMap,jdk1.8最重要的就是引入了红黑树的设计。当冲突链表的长度超过8时,链表结构就会转换为红黑树结构。 01.故事的由来至于为什么阈值是8,我认为在源码中寻找答案应该是最可靠的方法。 HashMap中定义了8的阈值,如下所示。该注释仅说明8是bin(binisbucket,即HashMap中保存的具有相同hashCode值的元素。

当链表长度达到8时,转换为红黑树,当长度下降到6时,转换为普通bin。说白了,这是一个权衡,空间和时间之间的权衡。当hashCode离散性很好时,使用treebin的概率很小。因为数据链表长度超过8,所以转换为红黑树设计。这样更多是为了防止用户不采用abadhash算法,会导致链表过长,导致查询效率低下。此时转为红黑树设计。 红黑树更多的是一种保证策略,保证极端情况下搜索结果是正确的。

JDK8之后,HashMap内部使用红黑树来存储数据。 下面我们通过HashMap的源码来分析一下黑树。 红黑树有5个原则:每个节点都是红或黑。根据泊松分布,当负载因子默认为0.75时,单个哈希槽的元素数量为8的概率小于百万分之一,所以7作为分水岭,等于7时不进行转换,大于等于8时才进行转换。

为什么将eshashmap转换成ared-blacktree_专访为什么将eshashmap转换成ared-blacktree_专访1:HashMap的数据结构是什么? A:哈希表结构(链表散列:数组+链表)实现,结合了数组和链表的优点。 当链表的长度超过转换红黑树阈值8时?负载因子是衡量哈希表在容量自动增加之前可以达到多少的程度。它衡量的是哈希表的空间使用情况。负载因子越大,表明哈希表的填充程度越多

当链表长度大于8时,HashMap会从链表转换为红黑树。并不是说大于8=大于等于7或大于等于8,而是因为if(binCount>TREEIFY_THRESHOLD-1){\}bi这里是因为链表转换红黑树也会消耗性能,特殊情况需要特殊处理。为了恢复性能,红黑树经过权衡后使用以提高性能。 也就是说,在大多数情况下,哈希图仍然使用链表。如果是理想的均匀分布,则节点

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

标签: redis 缓存穿透,击穿,雪崩

发表评论

评论列表

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