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

关于集合的底层数据结构

单列集合Collection分为list集合和set集合

list集合分为ArrayList和LinkedList

ArrayList--底层数据结构是数组

1.通过索引查询快

2.增删要重构索引,增删慢   

LinkedList--底层数据结构是链表

1.无索引查询慢

2.通过改变前节点的尾指针和后节点的前指针指向可快速增删,增删快

set集合(不可重复,没有索引,迭代器遍历)分为HashSet和TreeSet

HashSet存储数据原理-数组加链表/数组加红黑树,数组内存连续查询效率高,链表内存分散增删改效率高,哈希表的默认长度是16,超过这个长度时开始进行扩容(数组长度乘2),当链表节点个数大于8时链表会转化为红黑树,哈希表采用此种存储数据的形式极大的提高操作数据的效率

1.存储数据时会先操作(元素值作Key)key调用.hashcode()方法得出hash值,然后再通过哈希算法转换成数组的一个下标,对应的就是在数组上的的存储位置。

2.如果该位置没有数据,则直接存储。如果该位置有数据,则会发生数据碰撞。数据碰撞的时候遍历该位置上链表中的所有数据,并且通过equals()方法来比对每个数据的key。如果key相同的话,会将链表上该位置的数据进行覆盖。如果key不相同的话,在JDK1.8之前是实行的头插法,数据存储在链表头部,1.8之后实行的是尾插法数据存储在链表尾部。

3.JDK1.8之后,当链表上的节点个数(数据个数)大于等于8时并且数组长度不小于64的时候,链表数据结构自动进行树化转化成红黑树,当链表上的数据小于等于6时,又会自动退化成链表,当链表上的数据大于64时会进行扩容

TreeSet存储数据原理-红黑树

红黑树是一种自平衡二叉查找树,它具有以下特点:

1.红黑树规则

每个节点要么是红色,要么是黑色。

根节点是黑色的。

所有叶子节点(NULL节点)是黑色的。

如果一个节点是红色的,那么它的子节点必须是黑色的。

从根节点到每个叶子节点的路径上,黑色节点的数量相同。

2.红黑树添加节点规则

红黑树添加节点默认是红色的,添加的是根节点自动变黑。添加的是非根节点位置看父节点,父黑,不操作,父红,叔红,父叔变黑,祖父变红,若祖父为根节点,变黑。添加的是非根节点位置看父节点,父黑,不操作,父红,叔黑,父变黑,祖父变红,以祖父为节点进行旋转平衡二叉树要通过选择保持平衡,增删效率低,红黑树不用通过大量的旋转来维持平衡,所以增加了增删效率

双列集合Map

1.HashMap存储数据原理-数组加链表/数组加红黑树

2.TreeMap存储数据原理-红黑树

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

相关文章:

  • 【C++进阶】揭秘list迭代器:从底层实现到极致优化
  • Pulsar存储计算分离架构设计之Broker无状态
  • 飞算科技:用AI与数智科技,为产业数字化转型按下“加速键”
  • 《声音分类模型》
  • 一、Vue概述以及快速入门
  • 深度学习 --- 激活函数
  • Datawhale 202507 夏令营:让AI学会数学推理
  • Ultralytics代码详细解析(四:engine->trainer.py 训练部分代码详解)
  • 架构演进核心路线:从离线仓库到实时湖仓一体
  • EMA《2025-2028年药品监管中的数据与AI 1.3版》信息分析
  • vscode不识别vsix结尾的插件怎么解决?
  • SQL 基础案例解析
  • Oracle RAC+ADG switchover 切换演练流程
  • 景区负氧离子监测设备:守护清新,赋能旅游
  • 操作符练习
  • 倍增算法与应用(倍增优化之ST表、LCA、功能图、树上差分、贪心、二分)
  • mybatis多对一一对多的关联及拼接操作以及缓存处理
  • 主流开源LLM架构对比与突破·
  • 【Qt开发】Qt的背景介绍(四)
  • 项目复盘核心要点
  • 网络安全基础作业三
  • 图论的整合
  • JS WebAPIs DOM节点概述
  • v0+claude+cursor构建初始脚手架
  • 北京养老金计算公式网页实现案例:从需求分析到架构设计
  • 在Python中操作Word
  • 滴滴0722 总结与优化方向
  • J2EE模式---前端控制器模式
  • es6中的symbol基础知识
  • Element Plus Table 组件扩展:表尾合计功能详解