为什么HashMap中链表长度超过8会转换成红黑树

HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素超过8时,会自动转化成红黑树;若桶中元素小于等于6时,树结构还原成链表形式。

原因:

  红黑树的平均查找长度是log(n),长度为8,查找长度为log(8)=3,链表的平均查找长度为n/2,当长度为8时,平均查找长度为8/2=4,这才有转换成树的必要;链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。

还有选择6和8的原因是:

  中间有个差值7可以防止链表和树之间频繁的转换。假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。

史上最清晰的红黑树讲解(上)

史上最清晰的红黑树讲解(下)

原文地址:https://www.cnblogs.com/kelelipeng/p/12337019.html

时间: 2024-08-03 20:03:07

为什么HashMap中链表长度超过8会转换成红黑树的相关文章

(转)为什么HashMap中链表长度超过8会转换成红黑树

原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878 HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素超过8时,会自动转化成红黑树:若桶中元素小于等于6时,树结构还原成链表形式. 原因: 红黑树的平均查找长度是log(n),长度为8,查找长度为log(8)=3,链表的平均查找长度为n/2,当长度为8时,平均查找长度为8/2=4,这才有转换成树的必要:链表长度如果是小于等于6,6/2=3,虽然速度也很

JDK1.8 HashMap为什么在链表长度为8的时候转红黑树,为啥不能是9是10

起因: 这个问题是在面试某公司的时候面试官提的问题,当时没回答上来.归根到底还是因为自己复习基础的时候还不够仔细,也缺乏思考. 首先 我觉得需要确认一下,是不是随便什么情况下只要满足了链表长度为8就转红黑树呢?答案自然不是,为什么不是,看代码: /** * Replaces all linked nodes in bin at index for given hash unless * table is too small, in which case resizes instead. */ f

DB2中如何将非自动存储转换成自动存储空间管理方式

DB2 10引入根据温度管理数据存储的表空间更管理方式,但是需要数据库启用自动存储管理,具体在存储路径在某个目录下即可,要讲非自动存储的表空间转换成自动存储的管理方式需要两个步骤,尤其是从低版本升级过来的数据库. ALTER DATABASE EMPLOYEE ADD STORAGE ON '/data' 这样即可,但是对于原来使用DMS或SMS方式管理的表空间需要做重定向恢复,其实就是先做全备份,然后指定redirect restore即可,在原来的实例下恢复: RESTORE DATABAS

js中使用eval()方法将字符串转换成日期格式、并获取指定时间的日期

1.在js中eval()方法将字符串格式数据转换成日期格式 function getDate(strDate) {         //strDate为需要转换成日期格式的字符串         var date = eval('new Date(' + strDate.replace(/\d+(?=-[^-]+$)/,                 function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');    

办公中的PDF文件怎么在线转换成可编辑的TXT文档

办公中的PDF文件怎么在线转换成可编辑的TXT文档,TXT格式一般阅读起来比较方便,特别是看文件小说什么的都比较适合转换成TXT格式存在手机里观看,因此我们经常需要将PDF文件转换成TXT文件,那怎么转换的呢,请看下面的介绍. 搜索关键词迅捷PDF在线转换器,点开界面. 点开转换器首页,点击文档转换,在下拉框中找到PDF转TXT. 点击选择文件,弹出文件夹选项,选择你需要转换的PDF文件添加. 选择完文件后,点击开始转换. 文件转换需要一些时间,耐心等待转换进度完成. 转换完成后,可点选择直接打

工作中的CAD图纸文件怎么转换成BMP格式后保存桌面?

工作中的CAD图纸文件怎么转换成BMP格式后保存桌面?BMP格式是CAD图纸文件的一种,为了方便将CAD图纸文件进行打开查看都会需要进行的操作步骤就是将其进行格式间的转换操作成图片的格式,CAD转BMP就是其中一种,具体应该怎么样进行操作,下面小编就要来教大家的就是工作中的CAD图纸文件怎么转换成BMP格式后保存桌面的全部操作步骤,希望能够帮助到你们,望采纳! 步骤一:首先需要打开电脑上面的迅捷CAD转换器,电脑上面没有这款迅捷CAD转换器的就可以去到迅捷CAD官网上面进行下载安装! 步骤二:完

mysql中int型的数字怎么转换成字符串

字段:number  是integer类型    在表test中 select cast(number as char) as number from test; 或者convert()方法.因为转换的时候mysql不支持转换成varchar所有要转成char. /* 比如将123转换为char类型 */ SELECT CAST(123 AS CHAR); /* 或者使用concat方法 */ SELECT CONCAT(123,''); 原文地址:https://www.cnblogs.com

LeetCode中String to Integer (atoi) 字符串转换成整数

int atoi(const char *str) { long long result = 0; while (*str==' ')str++; int flag=0; if (*str == '-' || *str == '+') { flag = (*str == '-') ? -1 : 1; str++; } while (*str!='\0') { int temp = *str - '0'; if (temp >= 0 && temp <= 9) { result

把eclipse中一个java类型的项目转换成java web类型项目

解决步骤: 1.进入项目磁盘根目录下面找到.project文件打开: 2.找到文件中<natures>...</natures>这对标签: 3.在标签内追加上以下内容: <nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>