为什么JDK1.8 使用尾插法

时间: 2023-11-28 07:26:26 浏览: 32
在 JDK1.8 中,HashMap 的实现使用了尾插法解决哈希冲突的问题,这是因为尾插法相比于链表的头插法具有更好的性能表现。 在使用头插法时,每次插入一个元素都需要将该元素插入到链表的头部,这样会使得链表的顺序与元素的插入顺序相反,导致链表的遍历性能变差。而尾插法则可以保持链表的顺序与元素的插入顺序一致,遍历时的性能表现更好。 另外,尾插法可以避免出现逆序对,这可以有效地提高哈希表的性能。因此,JDK1.8 采用了尾插法解决哈希冲突的问题。
相关问题

jdk1.8为什么改用尾插法

在 JDK 1.8 中,HashMap 的底层实现由链表+红黑树转变为链表+红黑树+尾插法(Tail-Linked)。 使用尾插法的主要目的是解决链表产生的 hash 冲突时,新节点插入到链表头部导致链表反转的问题。在 JDK 1.8 中,使用尾插法可以保证新节点插入到链表尾部,不会导致链表反转。 具体来说,在 JDK 1.8 中,当链表长度达到阈值(默认为 8)时,会将链表转换为红黑树,从而提高查询效率。而在插入新节点时,如果当前桶中已经存在一个链表,则新节点不再插入到链表的头部,而是插入到链表的尾部,从而保证链表的顺序不会被打乱。 综上所述,尾插法的使用可以提高 HashMap 在处理 hash 冲突时的性能和稳定性。

JDK1.8之后HashMap头插法改为尾插法?

对不起,我必须澄清一下,JDK 1.8之后HashMap并没有改变头插法为尾插法。在JDK 1.8之前,HashMap使用的是头插法来处理哈希冲突,即将新的节点插入到链表的头部。这样做的目的是为了提高在哈希冲突时的查询效率。 然而,在JDK 1.8中,HashMap引入了红黑树来替代链表,以提高在链表长度过长时的查询效率。当链表长度超过阈值(默认为8)时,链表会转换为红黑树。这种转换只会发生在put()和get()等方法中。 所以,从JDK 1.8开始,HashMap仍然使用链表来解决哈希冲突,但在一定条件下会将链表转换为红黑树。并没有改变头插法为尾插法的变化。

相关推荐

最新推荐

recommend-type

Apache Tomcat 8.5的安装配置 、JDK 1.8的安装

TOMCAT 8.5的服务器状态、Tomcat Web应用程序管理者、Tomcat虚拟主机管理员设置
recommend-type

jdk1.8 for mac

tool for java ...jdk1.8 for mac JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
recommend-type

解决MyEclipse中Maven设置jdk版本jdk1.8报错问题

今天安装了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一个maven项目,项目默认是jdk1.5,改成jdk1.8后项目报错
recommend-type

JDK1.8安装教程及环境变量的配置.docx

java开发,教你如何安装jdk后,进行系统环境变量的设置,让系统能够正确识别jdk,能正确运行java程序。JDK1.8安装教程及环境变量的配置。
recommend-type

IKM2010年节选JAVA.JDK1.8笔试题.docx

这份是部分2020最新IKMJDK1.8笔试题,需要的朋友可以自己下载下来看下!里面包括都是有关JDK1.8的题目,本人全部都做过!
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性

![MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性](https://picx.zhimg.com/80/v2-8132d9acfebe1c248865e24dc5445720_1440w.webp?source=1def8aca) # 1. MATLAB结构体基础** MATLAB结构体是一种数据结构,用于存储和组织相关数据。它由一系列域组成,每个域都有一个名称和一个值。结构体提供了对数据的灵活访问和管理,使其成为组织和处理复杂数据集的理想选择。 MATLAB中创建结构体非常简单,使用struct函数即可。例如: ```matlab myStruct
recommend-type

详细描述一下STM32F103C8T6怎么与DHT11连接

STM32F103C8T6可以通过单总线协议与DHT11连接。连接步骤如下: 1. 将DHT11的VCC引脚连接到STM32F103C8T6的5V电源引脚; 2. 将DHT11的GND引脚连接到STM32F103C8T6的GND引脚; 3. 将DHT11的DATA引脚连接到STM32F103C8T6的GPIO引脚,可以选择任一GPIO引脚,需要在程序中配置; 4. 在程序中初始化GPIO引脚,将其设为输出模式,并输出高电平,持续至少18ms,以激活DHT11; 5. 将GPIO引脚设为输入模式,等待DHT11响应,DHT11会先输出一个80us的低电平,然后输出一个80us的高电平,
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。