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

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的值跟最新变化次数作比较 如果不一样就会报错

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

相关文章:

  • 如何在Python编程中应用Linux环境下的框架,以实现高效算法?
  • 多机位直播案例
  • 前沿重器[37] | 大模型对任务型对话的作用研究
  • 第三章:boundary-value analysis
  • Python模块psutil:系统进程管理与Selenium效率提升的完美结合
  • glibc 里的线程 id
  • nacos的部署与配置中心
  • undefined 与 undeclared 的区别?
  • Leetcode周赛370补题(3 / 3)
  • PyTorch深度学习实战——图像着色
  • InfiniBand 的前世今生
  • 分享一下微信小程序里怎么添加社区团购功能
  • 软考高项-IT部分
  • hugetlb核心组件
  • vscode配置环境变量
  • react:封装组件
  • 基于深度学习的视频多目标跟踪实现 计算机竞赛
  • linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、Wi-Fi热点
  • asp.net上传文件
  • JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)
  • 基础课23——设计客服机器人
  • mybatis在springboot当中的使用
  • 如何处理前端本地存储和缓存
  • 导轨式安装压力应变桥信号处理差分信号输入转换变送器0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA
  • 人体姿态估计和手部姿态估计任务中神经网络的选择
  • odoo16 one2many字段的 domain
  • 一份优秀测试用例的设计策略
  • 自动驾驶行业观察之2023上海车展-----智驾供应链(3)
  • 倒计时丨3天后,我们直播间见!
  • c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排