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

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

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

1. 概述

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

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

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

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

2. 链表

链表

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

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

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

3. 平衡二叉树

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

但是还有一种情况:

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

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

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

红黑树

http://www.lryc.cn/news/8262.html

相关文章:

  • 深度学习Week15-common.py文件解读(YOLOv5)
  • qemu的snapshot快照功能的详细使用介绍
  • 谷歌关键词优化多少钱【2023年调研】
  • 凸包及其算法
  • 计算机网络学习笔记(二)物理层
  • 为什么职称要提前准备?
  • MyBatis详解1——相关配置
  • 字节青训营——秒杀系统设计学习笔记(三)
  • 每天一道大厂SQL题【Day10】电商分组TopK实战
  • 最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏
  • vb.net计算之.net core基础(2)-发布应用
  • 微服务项目【商品秒杀接口压测及优化】
  • 1997. 访问完所有房间的第一天
  • 通达信交易接口以什么形式执行下单的?
  • CobaltStrike上线微信通知
  • 喜茶、奈雪的茶“花式”寻生路
  • Xstream使用教程
  • 【正点原子FPGA连载】第十一章PL SYSMON测量输入模拟电压 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 纷享销客百思特 | 数字化营销赋能企业新增长沙龙圆满落幕
  • oracle查看具体表占用空间 oracle查看表属于哪个用户
  • 2.Visual Studio下载和安装
  • 「4」线性代数(期末复习)
  • IDEA中使用tomcat8-maven-plugin插件
  • 2023年妇女节是哪一天 妇女节是2023年几月几日?
  • 如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践
  • 尚医通(十四)Spring Cloud GateWay网关 | 跨域 | 权限认证
  • PO模式在Selenium中简单实践
  • KubeSphere
  • JAVA基础阶段面试题(关键点)必备
  • Shiro简介