源码探索-ArrayList

2023-11-19

ArrayList 继承与实现关系

数组的相关属性
在这里插入图片描述

ArrayList底层是一个Object[] 数组,既然是数组,那么底层的工具类大多是会用到Arrays工具类去实现。
函数探索
在这里插入图片描述

来看看构造函数 有三个构造函数,分别对应不同的生成内容。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

来看看添加 扩容
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结:数组扩容为1.5倍,并且每次扩容都会进行范围判定,这在我们一些开发过程中,对于入参的值进行有效判断是非常必要的。必要在可恢复异常的时候,我们可以抛出异常防止程序奔溃。
其中,我们看到modCount这个属性,这就要涉及到常见的面试题了。我们来看看remove方法。
在这里插入图片描述

我们来看一个例子
在这里插入图片描述

探索remove方法
在这里插入图片描述

此时你删除了一个元素,但是modCount的值进行+1操作后。那么遍历下一个参数时的next方法时,其实是在AbstractList里的私有类Itr里的方法的next。
在这里插入图片描述

在这里插入图片描述

因为remove方法使得modCount加1,但是一开始赋值的expectedModCount并没有修改,就会抛出异常。
在这里插入图片描述

在这里插入图片描述

解决方案:
利用Iterator
利用CopyAndWriteArrayList
利用倒叙删除法
利用增强for循环跳出,使用break;
方法参考:

https://blog.csdn.net/weixin_38970751/article/details/84349920

来看看检索
在这里插入图片描述

在这里插入图片描述

tips:如有不对的地方,请反馈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

源码探索-ArrayList 的相关文章

随机推荐

  • VMWARE 占用硬盘空间越来越大的解决方法

    1 问题现象 为了开发android驱动 我使用vmware虚拟机运行UBUNTU12 04 硬盘分区有150G 分配了130g给虚拟机 还剩下不到20G的空间作为预留 本来想着130G的空间应该足够跑ubuntu的 但当我编译过几次and
  • 3D游戏编程——与游戏世界交互

    HW5 1 编写一个简单的鼠标打飞碟 Hit UFO 游戏 游戏内容要求 游戏有 n 个 round 每个 round 都包括10 次 trial 每个 trial 的飞碟的色彩 大小 发射位置 速度 角度 同时出现的个数都可能不同 它们由
  • 【LLM】如何将开源基础模型训练成特定领域的LLM?

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • xxxxxxxxxxxxxx

    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  • python生成10个随机数并排序_生成一个随机数的列表,然后对它们进行排序

    首先 我想向您展示完整的代码 稍后我将发表评论 import random def randomNum return random sample range 1 100 5 numbers list randomNum print numb
  • BUUCTF LOVESQL

    打开网页后 利用hackbar 先来查询他的列数 1 order by 3 试了1 2 3 4都不行 初步判断 是被后端代码过滤掉了 我们试试 和 的效果是一样的 但是当我尝试使用 后发现仍然没有反应 说明后端代码也过滤掉了 我们采用另外一
  • 二进制在数学中的妙用

    二进制在数学中的妙用 goal00001111搜集整理 十 八世纪初 莱布尼茨发明了二进制数 当时的他肯定没有预料到二进制在信息时代会有着如此广泛的应用 二进制数以其工作可靠 运算简单 逻辑严密 容易实现 等特点 成为了计算机的专用语言 在
  • linux下安装中文输入法及vim支持中文的方法

    最近折腾Ubuntu 之前一直是用英文显示系统 输入法也是Ubuntu14默认的拼音 一开始也没觉得不好 可是在vim编辑文档时 需要添加注释 这就显得十分不方便 所以花点时间来解决这个问题 一开始是想找vim如何支持中文的方法 网络上的各
  • Springboot Maven显示缺少org.junit.jupiter.api

    原因 spring boot 2 2 之前使用的是 Junit4 而后续的使用的是Junit5 导致缺少包 解决方法 导入包
  • C语言-多选题

    C语言多选题 1 若有字符串char string和缓冲区char buf MAX LEN string非空 并且缓冲区长度MAX LEN大于string的长度 则将字符串string复制到缓冲区buf 下列做法正确的是 AB A spri
  • CentOS 7查看磁盘空间

    CentOS如何查看硬盘大小 CentOS是一种基于Linux的操作系统 主要用于服务器端应用 在服务器管理中 硬盘大小是一个非常重要的指标 查看硬盘大小可以帮助系统管理员有效地管理硬盘空间和避免硬盘满了的情况 方法一 使用df命令 df命
  • Unity 用脚本操作常用UI控件(上)

    控件介绍 在界面系统的术语中 将一个具有独立状态 外观和操作的对象称为控件 例如 常用的交互控件有按钮 输入框 滑动条等 常见的非交互式控件有文本标签 图片等 Unity采用了父子物体和组件的设计思想 其每个界面控件 往往也是由游戏物体挂载
  • 虚拟内存的最大容量与实际容量区别

    虚拟内存的最大容量与实际容量区别 1 概念介绍 虚拟内存的最大容量是计算机的地址结构 CPU寻址范围决定的 虚拟内存的实际容量是内存与外存之和 CPU寻址范围 两者的最小值 2 例题介绍 某计算机的地址结构是64位 按字节编址 内存大小51
  • 找准边界,吃定安全

    潜在的网络威胁 网络安全挑战层出不穷 如何确保网络安全 山石云 景赋能中小企业安全运营 让安全更有效 找准边界 吃定安全 往期文章 从访问控制谈起 再看零信任模型 威胁情报加持 泛边界下的全局主动防御体系如何着手 流量剧增 看山石网科如何打
  • UWB与蓝牙AOA定位技术简要对比

    1 UWB基本原理 UWB 超宽带技术 是基于IEEE802 15 4a z标准的利用纳秒级窄脉冲进行数据传输的无线通信技术 主要服务于微位置 micro location a person s placement to within a
  • java中如何将Long类型转为Integer类型

    注意不能直接在前面加个 int 而是 将Long型转换为int型 这里的Long型是包装类型 Long a 10 int b a intValue 即long intValue
  • Hx711调试过程

    1 体重板子最开始出现的问题 无法下载程序 指示灯不亮 解决办法 检查电源复位晶振 发现晶振还有 boot键坏了 2 问题 下载进程序以后 板子通过串口发到电脑上的数据不变 解决办法 先是查了关于HX711的各种资料 了解到 HX711芯片
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • MFC中操作Word文档

    首先我们需要导入word类库 电脑上需要安装了word 左击项目 点击类向导 添加类 C 选择类型库中的MFC类 本文章案例可点击下载 然后选择文件 位置选择从office安装目录中找到MSWORD OLB文件 然后点击 gt gt 添加所
  • 源码探索-ArrayList

    ArrayList 继承与实现关系 数组的相关属性 ArrayList底层是一个Object 数组 既然是数组 那么底层的工具类大多是会用到Arrays工具类去实现 函数探索 来看看构造函数 有三个构造函数 分别对应不同的生成内容 来看看添