【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢

news2024/10/2 1:39:16

HashMap中为什么引入红黑树,而不是AVL树呢

1. 概述

开始学习这个知识点之前我们需要知道,在JDK1.8 以及之前,针对HashMap有什么不同。

  • JDK 1.7的时候,HashMap的底层实现是数组 + 链表
  • JDK1.8的时候,HashMap的底层实现是数组 + 链表 + 红黑树

我们要思考一个问题,为什么要从链表转为红黑树呢。

首先先让我们了解下链表有什么不好???

2. 链表

链表

上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度

  • 增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)
  • 删:算法时间复杂度跟保持一致
  • 查:既然是非线性结构,所以查询某一个节点的时候,最起码要遍历一遍,所以时间复杂度为O(n).

所以问题就来了,我们的目的就是优化链表查询效率,结果就是转换数据结构,从而引出了我们的平衡二叉树

3. 平衡二叉树

平衡二叉树是一种结构相对平衡的二叉搜索树。既然是二叉树结构,比较理想的状态如上图所示,节点分布相对平衡

但是还有一种情况:

在这里插入图片描述
这种也是一种平衡二叉树的结构,而我们实际的业务中出现这种状态概率很多,而那种理想的平衡二叉树的状态就很少。

所以我们为了保证,如果生成一个平衡二叉树,我们要求这个二叉树无论有多少节点,都一定要保持相对平衡。

所以我们使用了红黑树来满足这个需求

红黑树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web3中文|Web3再起恐慌:全球第三大稳定币BUSD发行商面临诉讼

俗话说,老大的位置不好当。作为全球最大加密资产交易所BA的CEO,赵长鹏的生活可谓一刻都不能平静。 刚刚结束与SBF的口舌之争,从FTX倒台的熊市中挺过来,赵长鹏又遇到了新的麻烦。 Nansen数据显示,用户在过去24小时内从…

LabVIEW开发的上位机界面在其它电脑分辨率下-界面窗口偏移显示问题解决

目录 问题: 分析: 解决方式 1)编辑前面板边界适配对应的分辨率 2)编辑前面板窗口-窗口边界 3)编辑前面板窗口-保持窗口比例 4)设置VI属性--窗口运行时位置居中显示 参考 问题: 在基于La…

图的基本概念

1、图的概念 G(V,E) 图G由节点集合VV(G)和边集合EE(G)组成,其中V为非空有限集合。 集合V中的节点(node)用红色标出,通过集合E中黑色的边(edge)连接。 G的边:E中的每个顶点对&#x…

SAP 如何在调式中查找标准程序的权限对象

当我们尝试分析授权问题(SU53、SU24……)时,有许多不同的交易很有用。 但是,在某些情况下,在调试中检查授权对象很有用。 这很有用,例如,如果我们想确切地知道在事务执行的哪个点调用了给定的授…

关键路径法和最小生成树

1、关键路径法概述关键路径的服务对象是“AOE网”(Activity on edge netword)。不同的是AOV网只考虑顶点事件,而AOE网除了顶点事件(如v[0])外,重点还有就是有向边还表示了活动(如e[0][1] a0)。其中顶点事件…

重生之我是赏金猎人-SRC漏洞挖掘(二)-逆向app破解数据包sign值实现任意数据重放添加

0x00前言 本期登场的目标虽不是SRC,但是整个漏洞的利用手法很有学习意义。目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验,而sign算法的破解往往是我们漏洞测试的关键所在~ 本人在一些漏洞挖掘实战中经常发现在破解sign值后&a…

【电商】订单拆单的流程中,系统需要做哪些工作?

什么是拆单? 在网上购买商品下单成功后,过一段时间再次浏览时,有时会发现你的订单会变成两个或多个,这就是系统做了拆单而导致的。 拆单,就是将一个大的订单依据某些规则的集合,将其分解成两个或多个子订…

内核模块(编译方法)

目录 一、向内核添加新功能 1.1 静态加载法: 1.2 动态加载法: a、新功能源码与Linux内核源码在同一目录结构下时 b、新功能源码与Linux内核源码不在同一目录结构下时 c、主机ubuntu下使用ko文件 d、开发板Linux下使用ko文件 二、内核模块基础代码…

链表题目总结 -- 回文链表

目录一. 从中心开始找最大的回文字符串1. 思路简述2. 代码3. 总结二. 判断是否为回文字符串1. 思路简述2. 代码3.总结三. 判断是否是回文链表1. 思路简述2. 代码3. 总结4. 优化解法一. 从中心开始找最大的回文字符串 题目链接:没有。给定一个字符串s,从…

平面电路和非平面电路

主要区别 参考:https://www.eda365.com/article-192836-1.html 平面电路:在平面上的每个元件的两端都可以不用交叉而连接到电路; 非平面电路:在平面上存在元件两端无法不交叉线路连接到电路。 例子(上面参考连接中&a…

继企业级信息系统开发学习1.1 —— Spring配置文件管理Bean

骑士救美计划采用构造方法注入属性值1、创建救美任务类2、创建救美骑士类2、创建救美骑士类3、创建旧救美骑士测试类3、配置救美骑士Bean5、创建新救美骑士测试类采用构造方法注入属性值 1、创建救美任务类 在net.huawei.spring.day01包里创建RescueDamselQuest类 Rescue Da…

【重点】Selenium + Nightwatch 自动化测试环境搭建

开始搭建 1. 创建项目 我们来找个地方新建一个目录,起名为 "my-test-toolkit",然后在目录内使用终端运行 npm init -y 生成项目配置文件package.json。 2. 安装工具 然后我们将安装 Selenium 与 Nightwatch。 安装 selenium-standalone&…

在哔站黑马程序员学习Spring—Spring Framework—(五)spring的第二特征AOP面向切面编程

一、AOP概念、作用AOP和OOP一样都是一种编程思想,用来指导我们做程序的。OOP面向对象编程指导我们做类、对象、继承、封装、多态等。AOP面向切面编程作用:在不惊动原始设计(不改变源代码)的基础上为其进行功能增强。核心&#xff…

2022年全国职业院校技能大赛网络空间安全A模块(1)

目录 模块A 基础设施设置与安全加固 一、项目和任务描述: 二、服务器环境说明 三、具体任务(每个任务得分以电子答题卡为准) A-1任务一 登录安全加固 1.密码策略(Windows,Linux) a.设置最短密码长度为…

AC/DC 基础

一、概念: AC转换成DC的基本方法有变压器方式和开关方式,如下图1、2所示;整流的基本方法有全波整流和半波整流,如下图3所示。 图1 变压器方式 图2 开关方式 图3 整流方式 二、转换方式 1、变压器方式 变压器方式首先需要通过变压…

< 算法基础 之 二分查找 >

算法基础 之 二分查找前言👉 “ 二分查找 ” 原理及实现👉 实际案例:> 基础案例 - 搜索下标示例 1示例 2解决方案> 进阶案例 - 搜索二维矩阵示例 1示例 2解决方案往期内容 💨前言 在开发中,我们常常会需要查找某…

java无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…

GEE学习笔记九十二:Sentinel-2 最新去云方法总结

下面使用例子的原始影像截图如下: 第一种方法:使用QA波段去云 这是我们最常用的方法,具体原理就是利用QA60波段标记实现去云,具体代码如下: var s2 ee.ImageCollection("COPERNICUS/S2"), point /* …

B树与B+树

B树 B树的定义 1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点&…

[Android Studio]Android 数据存储--SQLite数据库存储

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…