java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层

文章目录

  • 数据结构
  • 总结
  • ArrayList源码底层
  • LinkedList
    • 底层源码
  • 迭代器底层

数据结构

在这里插入图片描述
对于数据结构我这边只告诉你右边框框里的
在这里插入图片描述

栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈
栈就像一个弹夹

队列先进先出后进后出
队列像排队

在这里插入图片描述


在这里插入图片描述

链表查询满 但是增删快(相对于数组而言)

拓展:还有一个双向链表 他在查询元素的时候更快些,因为他在拿到一个元素后先判断离头结点近一点还是尾结点

总结

在这里插入图片描述

ArrayList源码底层

在这里插入图片描述

ArrayList用空参构造创建对象.在底层创建一个默认长度为0的数组elementData(数组名) 然后有一个size指向元素
添加第一个元素的时候,底层才会创建一个新的长度为10的1数组`
数组存满的时候回添加一个新数组 新数组是老数组长度的1.5倍 并且会把老数组的内容拷贝过去
size有两个含义:一个是集合长度 一个当他完成存储他会指向下次存入的位置

如果一次添加多个元素,1.5倍放不下,则新创建数组的长度以实际为准
在这里插入图片描述
上图为添加一个元素的经过的流程

在这里插入图片描述

上图为长度为10的数组装满如何扩容
minGrowth是至少要增加的容量
prefGrowth是默认新增容量的大小.就是老容量的1.5倍

LinkedList

在这里插入图片描述
在这里插入图片描述
独有api,了解即可,因为这些方法,Collectoin都可以实现

底层源码

LinkedList底层是一个双向链表所以他有
空参构造的成员位置有size和first last 头结点为节点.当掉用空参构造就会自动生成这些

node有三个成员变量
item现在要存储的数据
next 下一个结点要记录的地址值
prev我要记录前一个结点的地址值


在这里插入图片描述

空参构造创建完对象就是上图的样子
在这里插入图片描述

添加了一个结点

在这里插入图片描述

添加第二个元素的操作
在这里插入图片描述
添加第三个.元素添加完毕

迭代器底层

在这里插入图片描述

获取迭代器对象后相当于创建自己内部类对象(Itr)
内部类有三个成员变量
cursor指针默认初始化0
lasRet刚刚操作索引的位置

在这里插入图片描述

hasNext判断原理
指针跟size比较直到指针为3


在这里插入图片描述
上面源码就是为什么使用集合的方法太你家删除元素会报错的原因.因为modCount在使用add或者remove会自增 最后他会拿着一开始modCount的值跟最新变化次数作比较 如果不一样就会报错

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱 | 京东云技术团队

在云原生领域,无论使用哪种编排调度平台,Kubernetes,DockerSwarm,OpenShift等,业务都需要基于镜像进行交付,我们在内部实践“Source-to-image”和链式构建,总而总结出“OneBuild”模式。 其核心…

[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别

🌈键盘敲烂,年薪30万🌈 目录 一、过滤器filter 概念介绍: 过滤器的使用: 过滤器的执行流程: 应用场景(登录校验): 二、拦截器Interceptor 概念介绍: 拦截器的使用&#xff1…

ios原生分享

什么是 ios 系统的原生分享呢,如下图所示 具体使用系统UIActivityViewController,完整代码如下: -(void)shareAny:(NSString *)text url:(NSString *)_url imagePath:(NSString *)_imagePath {NSLog("shareAny, text:%, url:%, imagePa…

FRI及相关SNARKs的Fiat-Shamir安全

1. 引言 本文主要参考: Alexander R. Block 2023年论文 Fiat-Shamir Security of FRI and Related SNARKsAlbert Garreta 2023年9月在ZK Summit 10上分享 ZK10: Fiat-Shamir security of FRI and related SNARKs - Albert Garreta (Nethermind) 评估参数用的Sage…

甲方自建ERP这事靠不靠谱?来听听读过中欧商学院的老板怎么说

李总自建ERP开发团队的失败案例,投入三年,花了五六百万,做出来的东西,远不如免费开源的Odoo软件。Odoo有强大的技术平台,有无穷的功能插件。李总现身说法:“早知道有Odoo,何必瞎折腾&#xff0c…

SAP IDOC 开发入门

1, 基本概念 IDOC技术在早起版本的R/3系统就已经集成了,不过国内真正用起来还是05年以后了,其实IDOC是很强大的,在主数据和一些业务数据同步方面,几乎不需要做任何开发就可以配置完成,例如BD11,BD13这些事…

3 Spring底层概念介绍

BeanDefinition BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如: class,表示Bean类型 scope,表示Bean作用域,单例或原型等 lazyInit:表示Bean是否是懒加载 initM…

2.Docker基本架构简介与安装实战

1.认识Docker的基本架构 下面这张图是docker官网上的,介绍了整个Docker的基础架构,我们根据这张图来学习一下docker的涉及到的一些相关概念。 1.1 Docker的架构组成 Docker架构是由Client(客户端)、Docker Host(服务端)、Registry(远程仓库)组成。 …

C语言实现 1.在一个二维数组中形成 n 阶矩阵,2.去掉靠边元素,生成新的 n-2 阶矩阵;3.求矩阵主对角线下元素之和:4.以方阵形式输出数组。

矩阵形式: 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 完整代码: /*编写以下函数 1.在一个二维数组中形成如以下形式的 n 阶矩阵: 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 2.去掉…

【Vue3+Vite+bwip-js库】 生成DataMatrix码

前提条件 已存在的vue3vite架构前端项目对二维码分类有一定的了解 生成的码的样式如下&#xff08;DataMatrix&#xff09; 该二维码容量如下 详情见&#xff1a;DataMatrix介绍 Vue3Vite 导入 bwip-js生成DataMatrix 1. 安装 npm install bwip-js --save2. 引入使用 <…

基于STC12C5A60S2系列1T 8051单片机A/D转换器应用

基于STC12C5A60S2系列1T 8051单片机A/D转换器应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机A/D转换器介绍STC12C5A60S2系列1T 805…

xlua源码分析(二)lua Call C#的无wrap实现

xlua源码分析&#xff08;二&#xff09;lua Call C#的无wrap实现 上一节我们主要分析了xlua中C# Call lua的实现思路&#xff0c;本节我们将根据Examples 03_UIEvent&#xff0c;分析lua Call C#的底层实现。例子场景里有一个简单的UI面板&#xff0c;面板中包含一个input fie…

3.线性神经网络-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…

Qt 中model/View 架构 详解,以及案例实现相薄功能

model/View 架构 导读 ​ 我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改…

HNU程序设计 练习五-函数

1.小熊买糖果 【问题描述】 小熊去到商店&#xff0c;选择了一种它非常喜欢的糖果&#xff0c;其单价为 k 元&#xff0c;假定商店里有无穷多的这种糖果。 它的父亲允许它花费任意多的10元硬币和一个 r 元硬币去购买&#xff0c;但不能找零&#xff0c;请帮助小熊确定它能购买…

EMC Unity存储系统如何查看SSD的使用寿命

为什么要写这个博客&#xff1f; 客户对老的EMC unity的存储系统要扩容&#xff0c;如何确定SSD磁盘是全新的还是拆机二手的&#xff1f;很多时候客户还有一个奇葩的要求&#xff0c;就是要和5年前的磁盘PN一致&#xff0c;甚至要求固件版本一致&#xff0c;最关键的还要求是全…

Leetcode刷题详解——反转链表

1. 题目链接&#xff1a;206. 反转链表 2. 题目描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1…

【java学习—十二】io流(1)

文章目录 1. 主要内容2. File类3. 练习题4. Java IO原理 1. 主要内容 java.io.File 类的使用&#xff08;计算机操作系统中的文件和文件夹&#xff09; IO原理及流的分类。 IO即input和output。 流的解释&#xff1a;     比如&#xff1a;通过程序把图片放到某一个文件…

pycharm 断点调试python Flask

以flask框架为例&#xff0c;其启动命令为 python app.py runserver 后面需要拼接runserver 点击开始断点 参考&#xff1a;https://www.cnblogs.com/bigtreei/p/14742015.html

Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)

转自 Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)_mac zsh-CSDN博客 以下都是苹果 设置&#xff0c;这是简化版的&#xff0c;详细的看我引用的 个性化终端颜色背景设置 显示检查器 打开终端&#xff0c;鼠标在终端中&#xff0c;右击&…