当前位置: 首页 > news >正文

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

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

1. 概述

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

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

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

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

2. 链表

链表

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

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

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

3. 平衡二叉树

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

但是还有一种情况:

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

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

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

红黑树

相关文章:

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

HashMap中为什么引入红黑树,而不是AVL树呢1. 概述 开始学习这个知识点之前我们需要知道,在JDK1.8 以及之前,针对HashMap有什么不同。 JDK 1.7的时候,HashMap的底层实现是数组 链表JDK1.8的时候,HashMap的底层实现是数…...

深度学习Week15-common.py文件解读(YOLOv5)

目录 简介 一.基本组件 1.1autopad 1.2Conv 1.3 Focus 1.4Bottleneck 1.5BottleneckCSP 1.6 C3 1.7 SPP 1.8Concat 1.9Contract、Expand 二、重要类 2.1非极大值抑制(NMS) 2.2AutoShape 2.3 Detections 2.4 Classify 三、实验 &#x1f…...

qemu的snapshot快照功能的详细使用介绍

快照功能还是蛮有趣的,就是资料比较少,这边万能菜道人特意整理了一下。参考内容:QEMU checkpoint(snapshot) 使用-pudn.comKVM&QEMU学习笔记(二)-蒲公英云 (dandelioncloud.cn)在线迁移存储 - 爱码网 (likecs.com)…...

谷歌关键词优化多少钱【2023年调研】

本文主要分享Google关键词排名优化的一些成本调研,方便大家参考。 本文由光算创作,有可能会被剽窃和修改,我们佛系对待这种行为吧。 今年2023年了,谷歌关键词优化到底要多少钱? 答案是:价格在2w~25w左右…...

凸包及其算法

概念 凸包:一个能够将所有给定点围住的最小周长封闭图形。 稳定凸包:在当前组成凸包的点集 V0V_0V0​ 中新增一个不在凸包上的点,形成新点集 V1V_1V1​,若可以使 V1V_1V1​ 中所有点都在 V1V_1V1​ 的点的凸包上,则这…...

计算机网络学习笔记(二)物理层

物理层(传输比特0/1)基本概念 物理层下的传输媒体 1. 导引型 同轴电缆,双绞线(绞合可抵御干扰),光纤,电力线 2. 非导引型(调制振幅 频率 相位) 无线电波,微…...

为什么职称要提前准备?

职称反映专业技术人员的学术和技术水平、工作能力的工作成就,具有学衔、岗位两种性质。目前中国现状下,职称主要代表社会地位,就业经验,职称等级越高,越容易得到更高的社会经济和福利待遇。 职称通过申报、评审的形式…...

MyBatis详解1——相关配置

一、什么是MyBatis 1.定义:是一个优秀的持久层框架(ORM框架),它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式:xml或者注解实现操作(xm…...

字节青训营——秒杀系统设计学习笔记(三)

限流算法 限流顾名思义,就是对请求或并发数进行限制;通过对一个时间窗口内的请求量进行限制来保障系统的正常运行。如果我们的服务资源有限、处理能力有限,就需要对调用我们服务的上游请求进行限制,以防止自身服务由于资源耗尽而…...

每天一道大厂SQL题【Day10】电商分组TopK实战

每天一道大厂SQL题【Day10】电商分组TopK实战 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...

最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏

屏幕录制软件可让您捕获屏幕以与他人共享,创建与产品相关的视频、教程、课程、演示、视频等。这些软件是您能够从网络摄像头和屏幕录制视频。以下是精选的顶级屏幕录像机列表。 适用于 PC 的19 款免费录屏屏幕录像机软件 1)奇客免费录屏 奇客免费录屏&am…...

vb.net计算之.net core基础(2)-发布应用

目录 发布程序测试运行运行方式发布程序 首先,将编译配置改为Release 然后,发布应用,在生成菜单下。 选择发布到文件夹 继续选择文件夹 接着,完成 关闭 点击发布标签栏的发布按钮...

微服务项目【商品秒杀接口压测及优化】

生成测试用户 将UserUtils工具类导入到zmall-user模块中,运行生成测试用户信息,可根据自身电脑情况来生成用户数量。 UserUtils: package com.xujie.zmall.utils;import com.alibaba.nacos.common.utils.MD5Utils; import com.fasterxml.j…...

1997. 访问完所有房间的第一天

题目 你需要访问 n 个房间,房间从 0 到 n - 1 编号。同时,每一天都有一个日期编号,从 0 开始,依天数递增。你每天都会访问一个房间。 最开始的第 0 天,你访问 0 号房间。给你一个长度为 n 且 下标从 0 开始 的数组 n…...

通达信交易接口以什么形式执行下单的?

通达信程交易接口 以API形式来执行下单接口,一般不再需要通过接口系统之间进行连接,通过直接调用通达信dll交易函数的方式直接进行交易,包括下单,撤单,查询资金股份、当日委托、当日成交等方面都能很快的执行出来。以a…...

CobaltStrike上线微信通知

CobaltStrike上线微信通知 利用pushplus公众号(每天免费发送200条消息) http://www.pushplus.plus/push1.html 扫码登录后需要复制token 可以测试一下发送一下消息,手机会受到如下消息。可以在微信提示里将消息免打扰关闭(默认…...

喜茶、奈雪的茶“花式”寻生路

配图来自Canva可画 疫情全面开放不少人“阳了又阳”,电解质饮品成为热销品,梨子、橘子、柠檬等水果被卖断货,凉茶、黄桃罐头被抢购一空,喜茶的“多肉大橘”、奈雪的“霸气银耳炖梨”、蜜雪冰城的“棒打鲜橙”、沪上阿姨的“鲜炖整…...

Xstream使用教程

1.Xstream介绍 官网:https://x-stream.github.io/tutorial.html 介绍:XStream 对象序列化和反序列化为 XML的一个JAVA类库。JDK 1.4以上适用。 PS:与JAXB相比,Xstream更好用一些,像XStreamImplicit这种注解,我在JAX…...

【正点原子FPGA连载】第十一章PL SYSMON测量输入模拟电压 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十一章PL SYSM…...

纷享销客百思特 | 数字化营销赋能企业新增长沙龙圆满落幕

为进一步帮助企业客户实现数字化转型,纷享销客联合百思特管理咨询集团,于2月10日举办 “数字化营销赋能企业新增长”主题沙龙。本次活动以“新变革新增长”为主题,现场30余位制造企业高管齐聚一堂,共同探讨企业如何在当前复杂的宏…...

oracle查看具体表占用空间 oracle查看表属于哪个用户

文章目录前言oracle查看具体表占用空间1、查看表空间总大小、使用率、剩余空间2、查看具体表的占用空间大小3、查看表空间对应日志文件oracle查看表属于哪个用户1、oracle怎么查看表属于哪个用户2、Oracle查询视图所属用户3、Oracle查询存储过程所属用户总结前言 表空间是数据…...

2.Visual Studio下载和安装

Visual Studio 是微软提供的一个集成开发环境(IDE),主要用于为 Windows 系统开发应用程序。Visual Studio 提供了构建 .Net 平台应用程序的一站式服务,可以使用 Visual Studio 开发、调试和运行应用程序。 1、Visual Studio下载 …...

「4」线性代数(期末复习)

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 第四章 向量组的线性相关性 &2)向量组的线性相关性 &3)向…...

IDEA中使用tomcat8-maven-plugin插件

第一种方式 pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…...

2023年妇女节是哪一天 妇女节是2023年几月几日?

2023年妇女节是哪一天是2023年几月几日&#xff1f; 2023年妇女节是2023年3月8日 三八妇女节是国家法定节假日吗&#xff1f; 妇女节不是国家法定节假日&#xff0c;而国家法定节假日包括&#xff1a;元旦、春节、清明节、劳动节、端午节、中秋节、国庆节&#xff1b; 关于三…...

如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SktQW2qn-1676450580889)(https://www-cdn.nebula-graph.com.cn/nebula-website-5.0/images/blogs/58.%20Com%20Inc/58%E5%90%8C%E5%9F%8E_%E7%94%BB%E6%9D%BF%201.jpg)] 图计算业务背景介绍 我们为什…...

尚医通(十四)Spring Cloud GateWay网关 | 跨域 | 权限认证

目录一、网关基本概念1、API网关介绍2、Spring Cloud Gateway3、Spring Cloud Gateway核心概念二、创建service_gateway模块&#xff08;网关服务&#xff09;1、创建service_gateway模块2、在pom.xml引入依赖3、编写application.properties配置文件4、编写启动类5、前端端口号…...

PO模式在Selenium中简单实践

初识PO模式 PO&#xff08;PageObject&#xff09;是一种设计模式。简单来说就是把一些繁琐的定位方法、元素操作方式等封装到类中&#xff0c;通过类与类之间的调用完成特定操作。 PO被认为是自动化测试项目开发实践的最佳设计模式之一。 在学习PO模式前&#xff0c;可以先…...

KubeSphere

文章目录一、概述二、最小化安装 KubeSphere2.1 前提2.2 安装 nfs 服务器一、概述 KubeSphere是在Kubernetes之上构建的以应用为中心的企业级分布式容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使用容器调度平台学习成本的同时&#…...

JAVA基础阶段面试题(关键点)必备

1、简述什么是 JDK、JRE 和 JVM&#xff1f; JDK : 开发工具包JRE : 运行时环境JVM : java虚拟机2、写出Java的四类八种基本数据类&#xff1f;整数 byte short int long小数(浮点) float double布尔 boolean字符 char3、& 和 && 的区别 ?& 符号的左右两边,无…...

wordpress首页打不开内容页正常/线上推广宣传方式有哪些

2019独角兽企业重金招聘Python工程师标准>>> 嵌套饼图的实现主要是定义多层数据&#xff0c;实际上只需要写成json格式的数组&#xff0c;多层数据源之间用逗号连接起来&#xff0c;自定义样式之后就可以实现&#xff0c;与非嵌套饼图没有很大的区别。 1.下载Echart…...

wordpress所有栏目循环输出/推广普通话ppt课件

flutter学习(1):目录结构及基本组件 文章目录flutter学习(1):目录结构及基本组件一.目录结构二.入口文件和方法自定义组件加点样式MaterialApp和Scaffold装饰APPMaterialAppScaffold利用scaffold加入导航栏一.目录结构 build 编译目录lib 写代码的地方test 测试pubspec.yaml 依…...

多网站怎么做seo/新平台推广赚钱

转载于&#xff1a;https://www.ibm.com/developerworks/cn/linux/l-pipebid/ 问题和常见方法Linux 提供了 popen 和 pclose 函数 (1)&#xff0c;用于创建和关闭管道与另外一个进程进行通信。其接口如下&#xff1a;FILE *popen(const char *command&#xff0c; const char *…...

wordpress调用文章tag标签/外链吧官网

上传文件测试时发现控制台没报错&#xff0c;但是在eclipse的workspace中的指定项目下找不到上传的文件 打印输出上传的项目路径时才发现原来在这个位置 D:\code\JavaCode\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps 为避免下次出现同种情况&a…...

国家企业营业执照查询系统/网站排名优化外包

RC电路在模拟电路、脉冲数字电路中得到广泛的应用&#xff0c;由于电 路的形式以及信号源和R&#xff0c;C元件参数的不同&#xff0c;因而组成了RC电路的各种应用形式&#xff1a;微分电路 、积分电路、耦合电路、滤波电路及脉冲分压器。关键词&#xff1a;RC电路。微分、积分…...

佛山门户网站建设/网络推广方法有几种

循环中使用闭包&#xff0c;假设我们需要在每次循环中调用循环序号 for(var i 0; i < 10; i) {setTimeout(function() {console.log(i); }, 1000);}上面的代码不会输出数字 0 到 9&#xff0c;而是会输出数字 10 十次。 当 console.log 被调用的时候&#xff0c; 匿名函数保…...