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

集合-ArrayList源码分析(面试)

系列文章目录

1.集合-Collection-CSDN博客​​​​​​

2.集合-List集合-CSDN博客

3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客


目录

系列文章目录

前言

一 . 什么是ArrayList?

二 . ArrayList集合底层原理

总结


前言

大家好,今天给大家讲一下ArrayList底层的扩容机制


一 . 什么是ArrayList?

ArrayList 是 List 接口的实现类之一,它是基于动态数组实现的,可以根据需要自动调整大小。ArrayList 具有以下特点:

  1. 有序性:ArrayList 中的元素是有序的,可以根据插入的顺序进行访问和操作。
  2. 可重复性:ArrayList 允许存储重复的元素。
  3. 动态调整大小:ArrayList 内部使用数组来存储元素,当元素数量超过当前数组容量时,ArrayList 会自动进行扩容,以容纳更多的元素。
  4. 随机访问:由于 ArrayList 使用数组来存储元素,因此可以通过索引来直接访问元素,具有较快的随机访问速度。
  5. 线程不安全:ArrayList 不是线程安全的,如果在多个线程同时对 ArrayList 进行修改操作,可能会导致不可预期的结果。

拓展: ArrayList和vector的区别

本质上两者没什么区别,不同的是vector是线程安全的,Arraylist是线程不安全的,两者在扩容时,扩容的空间不同,其余的两者完全一致,只不过vector使用的很少,了解即可

在ArrayList中我们没有额外的方法需要学习,它的方法直接继承自List接口


二 . ArrayList集合底层原理

public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");
}

上面代码中利用无参构造方法创建ArrayList的对象,底层会创建一个默认长度为零的数组element

 在添加第一个元素的时候,size==emlment.length==0 会调用扩容方法grow

 说到这了,给大家解释一下size

 私有化成员变量,没有初始化,默认值为0

size有两个含义: 1. 表示当前数组中元素的个数 2. 表示下一个元素的存入位置

ok 我们来看一下grow方法

如果容量不足,且不是第一次扩容

就会调用newLength方法计算扩容后的容量的大小

这个时候可能就会有人提出疑问了? 我一个一个元素的添加怎么可能会让minGrowth>prefGrowth?

其实Arraylist集合中还有一个addAll方法

ArrayList 类提供了 addAll(Collection<? extends E> c) 方法,用于将指定集合中的所有元素添加到列表的末尾。该方法的参数是一个集合,可以是 ArrayList、LinkedList 或其他实现了 Collection 接口的类的实例。

这样一来minGrowth是不是就有可能比prefGrowth大了

newlength方法返回值处的三目运算符本质上就是去判断prefLength是否越界(int的最大值),了解即可。

总结:


总结

大家好好理解,下一篇博客见。

相关文章:

集合-ArrayList源码分析(面试)

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 目录 系列文章目录 前言 一 . 什么是ArrayList? 二 . ArrayList集合底层原理 总结 前言 大家好,今天给大家讲一下Arra…...

跨类型文本文件,反序列化与类型转换的思考

文章目录 应用场景序列化 - 对象替换原内容&#xff0c;方便使用编写程序取得结果数组 序列化 - JSON 应用场景 在编写热更新的时候&#xff0c;我发现了一个古早的 ini 文件&#xff0c;记录了许多有用的数据 由于使用的语言年份较新&#xff0c;没有办法较好地对 ini 文件的…...

ubuntu20安装nvidia驱动

1. 查看显卡型号 lspci | grep -i nvidia 我的输出&#xff1a; 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1) 07:00.0 VGA comp…...

gma 2 成书计划

随着 gma 2 整体构建完成。下一步计划针对库内所有功能完成一个用户指南&#xff08;非网站&#xff09;。 封皮 主要章节 章节完成度相关链接第 1 章 GMA 概述已完成第 2 章 地理空间数据操作已完成第 3 章 坐标参考系统已完成第 4 章 地理空间制图已完成第 5 章 数学运算模…...

从零手搓一个【消息队列】项目设计、需求分析、模块划分、目录结构

文章目录 一、需求分析1, 项目简介2, BrokerServer 核心概念3, BrokerServer 提供的核心 API4, 交换机类型5, 持久化存储6, 网络通信7, TCP 连接的复用8, 需求分析小结 二、模块划分三、目录结构 提示&#xff1a;是正在努力进步的小菜鸟一只&#xff0c;如有大佬发现文章欠佳之…...

【Spring Cloud】深入探索 Nacos 注册中心的原理,服务的注册与发现,服务分层模型,负载均衡策略,微服务的权重设置,环境隔离

文章目录 前言一、初识 Nacos 注册中心1.1 什么是 Nacos1.2 Nacos 的安装&#xff0c;配置&#xff0c;启动 二、服务的注册与发现三、Nacos 服务分层模型3.1 Nacos 的服务分级存储模型3.2 服务跨集群调用问题3.3 服务集群属性设置3.4 修改负载均衡策略为集群策略 四、根据服务…...

No156.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

如何在PIL图像和PyTorch Tensor之间进行相互转换,使用pytorch进行PIL和tensor之间的数据转换

目录 引言PIL简介PyTorch和Torchvision简介PIL转换为TensorTensor转换为PIL实例代码和解释结论参考文献 &#x1f4dd; 引言 在计算机视觉领域&#xff0c;使用图像处理库对图像进行预处理是非常常见的。其中&#xff0c;Python Imaging Library&#xff08;PIL&#xff09;以…...

STM32F4X UCOSIII任务消息队列

STM32F4X UCOSIII任务消息队列 任务消息队列和内核消息队列对比内核消息队列内核消息队列 UCOSIII任务消息队列API任务消息队列发送函数任务消息队列接收函数 UCOSIII任务消息队列例程 之前的章节中讲解过消息队列这个机制&#xff0c;UCOSIII除了有内核消息队列之外&#xff0…...

8个居家兼职,帮助自己在家搞副业

越来越多的人开始追求居家工作的机会&#xff0c;无论是为了获得更多收入以改善生活质量&#xff0c;还是为了更好地平衡工作和家庭的关系&#xff0c;居家兼职已成为一种趋势。而在家中从事副业不仅能够为我们带来额外的收入&#xff0c;更重要的是&#xff0c;它可以让我们在…...

管理与系统思维

技术管理者不仅仅需要做事情&#xff0c;还需要以系统思维的方式推动组织变革&#xff0c;从而帮助团队和个人做到更好。原文: Management and Systems Thinking 图片来源: Dall-E "除非管理者考虑到组织的系统性&#xff0c;否则大多数提高绩效的努力都将注定失败。"…...

电死人的是电流还是电压?

先说答案&#xff0c;是电流。 这个有两个派别&#xff0c;一个是电流派&#xff0c;一个是电压派。 举个例子&#xff0c;拿我们的头发或者指甲之类的高电阻物质去接触高压&#xff0c;你会发现基本没有什么作用&#xff1b;还有就是冬天我们脱毛衣的时候&#xff0c;噼里啪啦…...

mac 编译问题记录

1、mac 编译提示 Unsupported option ‘--no-pie‘ Linux 上用 --no-pie mac 上用 -no-pie 2、mac 找不到 malloc.h 使用 #include <sys/malloc.h> Mac上使用malloc函数报错_mac malloc.h-CSDN博客...

centos 7.9同时安装JDK1.8和openjdk11两个版本

1.使用的原因 在服务器上&#xff0c;有些情况因为有一些系统比较老&#xff0c;所以需要使用JDK8版本&#xff0c;但随着时间的发展&#xff0c;新的软件出来&#xff0c;一般都会使用比较新的JDK版本。所以就出现了我们标题的需求&#xff0c;一个系统内同时安装两个不同的版…...

【JavaEE】HTML

JavaWeb HTML 超文本标记语言 超文本&#xff1a;文本、声音、图片、视频、表格、连接标记&#xff1a;有许许多多的标签组成 vscode开发工具搭建 因为我使用的IDEA是社区版&#xff0c;代码高亮补全缩进都有些问题&#xff0c;使用vscode是最好的选择~ 安装 Visual Stu…...

【数据结构--八大排序】之堆排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

c# 中的类

反射 Activator.CreateInstance class Program {static void Main(string[] args){//反射Type t typeof(Student);object o Activator.CreateInstance(t, 1, "FJ");Student stu o as Student;Console.WriteLine(stu.Name);//动态编程dynamic stu2 Activator.Cre…...

基于单片机的煤气泄漏检测报警装置设计

一、项目介绍 煤气泄漏是一种常见的危险情况&#xff0c;可能导致火灾、爆炸和人员伤亡。为了及时发现煤气泄漏并采取相应的安全措施&#xff0c;设计了一种基于单片机的煤气泄漏检测报警装置。 主控芯片采用STM32F103C8T6作为主控芯片&#xff0c;具有强大的计算和控制能力。…...

[导弹打飞机H5动画制作] 导弹每次飞行的随机路线制作

技术核心提示: 第一步:检测引导层插件是否具备,如果没有手工添加: createjs.MotionGuidePlugin.install(); 第二步:增加全局变量: var fValue=0; var iOddEven =0; var missileObj=null; 第三步:填写 第一帧 代码: if (missileObj)stage.removeChild(missileObj);missile…...

OpenCV实现FAST算法角点检测 、ORB算法特征点检测

目录 1 Fast算法 1.1 Fast算法原理 1.2 实现办法 1.2.1 机器学习的角点检测器 1.2.2 非极大值抑制 1.3 代码实现 1.4 结果展示 2 &#xff0c;ORB算法 2.1代码实现 2.2 结果展示 1 Fast算法 1.1 Fast算法原理 1.2 实现办法 1.2.1 机器学习的角点检测器 1.2.2 …...

【Unity的 Built-in 渲染管线下实现好用的GUI模糊效果_Blur_案例分享(内附源码)】

CGPROGRAM实现好用的GUI模糊效果 实现Blur模糊方式1C#代码如下方式1_Shader代码如下实现Blur模糊方式2方式2_Shader如下实现Blur模糊方式1 其他的模糊效果,在这一篇。 效果如图: 新建一个C#文件,命名为"CommandBlur",打开C#,删除内容,复制粘贴下面的代码:…...

AR智能眼镜:提升现场服务技能、效率与盈利能力的利器(一)

随着技术的不断进步&#xff0c;现场服务组织正朝着远程支持转变&#xff0c;用以解决技能差距和生产力问题&#xff0c;提高员工培训和操作效率&#xff0c;同时为企业提高利润率&#xff0c;创造竞争优势。 本文将探讨增强现实&#xff08;AR&#xff09;、辅助现实&#xf…...

ChatGPT 在机器学习中的应用

办公室里一个机器人坐在人类旁边&#xff0c;Artstation 上的流行趋势&#xff0c;美丽的色彩&#xff0c;4k&#xff0c;充满活力&#xff0c;蓝色和黄色&#xff0c; DreamStudio出品 一、介绍 大家都知道ChatGPT。它在解释机器学习和深度学习概念方面也非常高效&#xff0c;…...

【JavaEE】锁策略

文章目录 前言1. 乐观锁和悲观锁2. 重量级锁和轻量级锁3. 自旋锁和挂起等待锁4. 公平锁和非公平锁5. 可重入锁和非可重入锁6. 读写锁Java synchronized 分别对应哪些锁策略1. 乐观锁和悲观锁2. 重量级锁和轻量级锁3. 自旋锁和挂起等待锁4. 公平锁和非公平锁5. 可重入锁和非可重…...

在 SDXL 上用 T2I-Adapter 实现高效可控的文生图

T2I-Adapter 是一种高效的即插即用模型&#xff0c;其能对冻结的预训练大型文生图模型提供额外引导。T2I-Adapter 将 T2I 模型中的内部知识与外部控制信号结合起来。我们可以根据不同的情况训练各种适配器&#xff0c;实现丰富的控制和编辑效果。 同期的 ControlNet 也有类似的…...

Python分支结构和循环结构

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一.分支结构 分支结构是根据判断条件结果而选择不同向前路径的运行方式&#xff0c;分支结构分为&#xff1a;单分支&#xff0c;二分支和多分支。 1&#xff0…...

Unity调用API函数对系统桌面和窗口截图

Unity3D调用WINAPI函数对系统窗口截图 引入WINAPI函数调用WINAPI函数进行截图使用例子 引入WINAPI函数 using System; using System.Collections; using System.Runtime.InteropServices; using System.Drawing;[DllImport("user32.dll")]private static extern Int…...

【问题思考总结】CPU怎么访问磁盘?CPU只有32位,最多只能访问4GB的空间吗?

问题 在学习操作系统的时候发现了这样一个问题&#xff0c;32位的CPU寻址空间只有4GB&#xff0c;难道只有4GB的空间可以使用吗&#xff1f;以此为始&#xff0c;我开始了一些思考。 思考 Q1&#xff1a;首先&#xff0c;我似乎混淆了一个概念&#xff0c;内存和外存&#x…...

UG NX二次开发(C++)-CAM-根据刀具对程序组进行重新分组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个三维模型3、在UG NX/CAM中创建多个加工程序4、采用UG NX二次开发(NXOpen)实现按照刀具分组程序组4.2 创建UI Styler4.1 实现逻辑4.2 生成的代码如下:4.3 测试效果4.…...

Unity如何实现TreeView

前言 最近有一个需求,需要实现一个TreeView的试图显示,开始我一直觉得这么通用的结构,肯定有现成的UI组件或者插件可以使用,结果,找了好久,都没有找到合适的插件,有两个效果差强人意。 最后在回家的路上突然灵光一闪,想到了一种简单的实现方式,什么插件都不用,仅使用…...

wordpress例子/百度爱采购服务商查询

首先&#xff0c;需要打开终端&#xff0c;若桌面没有终端图标&#xff0c;则可以使用ctrlaltt即可&#xff0c;之后将终端锁定在任务栏。 其次&#xff0c;需要获取root权限&#xff0c;使用命令 su root 密码&#xff08;我的是root&#xff09;。 进入之后&#xff0c;…...

判断网站模板版本/常用的搜索引擎

在寒冷的冬天&#xff0c;很多车主在开车的时候会出现一个问题&#xff0c;那就是凉车启动困难这个问题&#xff0c;具体就是打不着火&#xff0c;必须得打几下才能启动&#xff0c;或者在打火的时候&#xff0c;发动机运转了几个行程之后才能打着火&#xff0c;而且打着火以后…...

网站自助建设推广/网店推广方案策划书

基于H5的App在IOS App Store的打包发布流程0、说明1、ios证书配置&#xff08;1&#xff09;创建CSR文件&#xff08;2&#xff09;申请开发者证书&#xff08;3&#xff09;申请推送证书&#xff08;4&#xff09;申请provisioning profile2、打包&#xff08;1&#xff09;We…...

wordpress+在线播放/疫情最新资讯

点击上方蓝色字体&#xff0c;选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注&#xff0c;大数据开发领域最强公众号&#xff01;大数据真好玩点击右侧关注&#xff0c;大数据真好玩&#xff01;1. JVM crash了下面是一份crash report, 下面是截取了cr…...

武汉网站建设熊掌号/企业推广是什么意思

例一&#xff1a;列出/home/peidachang文件夹下的所有文件和目录的详细资料 ls -l -R /home/test 例二&#xff1a;列出当前目录中所有以“t”开头的目录的详细内容&#xff0c;可以使用如下命令&#xff1a; ls -l t* 例三&#xff1a;只列出文件下的子目录 ls -F /opt/sof…...

哪里有学习做网站的/网络营销方式都有哪些

2016-12-12 11:57:12使用ajax的开发项目过程中&#xff0c;经常需要将json格式的字符串返回到前端&#xff0c;前端解析成js对象(JSON )。如果直接以json的格式返回则方便很多&#xff0c;有时候通过后台直接写到页面中则会以字符串的方式存在&#xff0c;那么就用到了将字符串…...