【集合我能讲两小时009】jdk1.8的hashmap为什么在链表长度为8的时候判断红黑树?
2023-09-27 14:29:28 时间
jdk1.8的hashmap为什么在链表长度为8的时候判断红黑树?
在jdk1.8及以后的版本,hashmap采用的数据结构是,数组+链表,更改为在链表长度为8时,开始由链表转化为红黑树。
链表的时间复杂度是O(n),红黑树的时间复杂度是o(logn),红黑树的时间复杂度是优于链表的。因为树节点所占空间是普通节点的2倍。所以当节点足够多时选择使用红黑树。也就是说,当节点比较少的时候,尽管红黑树的时间复杂度表现比链表好一些,但红黑树所占空间比链表大,综合考虑,在节点较多时,红黑树所占空间劣势相比查询性能的提升不那么明显时,转化为红黑时。
为什么选择8作为临界值呢?
在理想状况下,受随机分布hashcode的影响,链表中的节点遵循泊松分布。据统计链表中节点数是8的概率大概是千分之一,并且此时链表的性能很差了。在这种情况下,转化为红黑树,优化查询性能。
相关文章
- 图解剑指 Offer II 024. 反转链表(LeetCode)
- 数据结构(二):链表、链队列
- 【大厂算法系列】链表实战篇,基于链表编码实现课程信息管理系统
- 《算法导论》习题解答 Chapter 22.1-2(邻接矩阵与链表)
- Java实现单向链表基本功能
- 《手撕链表题系列-7》链表的回文结构
- 【数据结构】栈-链表的实现
- LeetCode_哈希表_中等_817.链表组件
- leetcode1721. 交换链表中的节点
- 206. 反转链表
- 数据结构实验之链表一:顺序建立链表
- C-链表实现,保存文件,评估-单项选择题系统课程设计---ShinePans
- [LeetCode] 61. Rotate List 旋转链表
- [LeetCode] 203. Remove Linked List Elements 移除链表元素
- [LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项
- [LeetCode] 92. Reverse Linked List II 反向链表II
- 【集合我能讲两小时011】如果链表的长度大于8,一定会转化为红黑树吗?