集合面试题--ArrayList数组

news2024/9/28 17:34:38

介绍数组

数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构。数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构。

 

因为int占4个字节,所以也可以理解为占四块内存

数组如何获取其他元素的地址值

 为什么数组索引从0开始呢?假如从1开始不行吗? 

在根据数组索引获取元素的时候,会用索引寻址公式来计算内存所对应的元素数据,寻址公式是:数组的首地址+索引乘以存储数据的类型大小

如果数组的索引从1开始,寻址公式中,就需要增加一次减法操作,对于CPU来说就多了一次指令性能不高

操作数组的时间复杂度(插入,删除)

操作数组的时间复杂度(查询)

总结

源码分析

 一般来说问的比较多的就是,添加数据的逻辑,如果添加多个数据,他的扩容方式

成员变量

构造函数

关键方法

 添加和扩容操作(第1次添加数据)

 

 第一步,ensureCapacityInternal(size + 1); 确保内部的容量,第一次添加数据的时候,size的默认值是0,+1的操作,不就是1了

第二步,内部有调用了calculateCapacity(elementData, minCapacity));意思是计算容量。elementData是我们的成员变量,minCapacity就是我们刚刚传过来的1

第三步,因为我们调用了无参的构造方法,所以此时elementData 是等于DEFAULTCAPACITY_EMPTY_ELEMENTDATA

第四步,ensureExplicitCapacity(int minCapacity) 确认明确容量,因为我们是第一次添加,elementData里面是空的,所以我们需要扩容,他就会找grow方法

第五步,先拿到数组的容量,并且赋值给oldCapacity,现在数组容量是0,赋值给old,还是0,第二行进行扩容,右移一位,除以2,所以新容量还是0,然后第一个if语初始化数组长度,0-10<10。第二个if语句主要是一个安全判断,判断数组是否过大。最后执行elementData = Arrays.copyOf(elementData, newCapacity);进行数组拷贝,初始化数组,长度是10,并且赋值给elementData

第六步,elementData[size++] = e;将你传进来的值通过下标放到数组中,并且当前元素个数size+1,最后返回一个true。


添加和扩容操作(第2至10次添加数据)

 因为我们第一次添加数据,已经将数组初始化长度为10了,这时候添加数据,如果不超过10,是不需要扩容数组,假如现在是第10次添加数据了

第一步size此时是9,+1之后才是10,这个10往下传递

第二步依然要确保内部的容量,然后调用计算容量的方法,在计算容量时依然是10

第三步,确认容量,接收了参数10,判断if语句,在2到10的过程中,-10一直是<=0的,所以不会扩容,直接往数组中添加数据就行了,这就是在不扩容的情况下操作集合

添加和扩容操作(第11次添加数据)

当你添加第11给元素的时候,会先去确保内部容量,此时minCapacity是11,此时又走到计算容量返回11,在确保容量的方法中,11-10>0所以需要扩容

在扩容方法中,old是10,new等于10+10/2=15,所以容量变为原来的1.5倍

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

600多个人工智能AI工具汇总,资源、教程和讲解免费提供(第二讲)

这里是600多个人工智能AI工具汇总第二讲&#xff0c;每天介绍5个&#xff0c;文章最后会告诉大家获取方式的。现在请大家同我一起进入AIGC的世界。 第一个&#xff1a;Leonardo.Ai&#xff0c;用来创造力、革新为你的创意项目生成质量的资产AI-driven速度和style-consistency。…

代码安全审计

什么是代码安全审计 代码安全审计是指有开发和安全经验的人员,通过阅读开发文档和源代码,以自动化分析工具或者人工分析为手段,对应用程序进行深入分析,高效全面的发现系统代码的编码缺陷以及开发人员不安全的编程习惯,并指导开发人员进行修复,保障应用系统的安全运行。 …

Spring Boot 中的任务调度器是什么,如何使用?

Spring Boot 中的任务调度器是什么&#xff0c;如何使用&#xff1f; 介绍 在开发企业级应用程序时&#xff0c;经常需要执行定时任务或周期性任务。这些任务可以包括清理临时文件&#xff0c;备份数据库&#xff0c;发送电子邮件等等。Spring Boot 提供了一个内置的任务调度…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第一章:设备配网、连接服务器、断网重连、断服务器重接】

第一章开发环境&#xff1a; 主控STM32F103C8T6WIFI模块ESP01S开发语言C开发编译器 KEIL 组网方式WIFI服务器协议MQTT 本章要点&#xff1a; ESP01S的AT指令配网以及服务器连接STM32与ESP01S的usart协议通信断网重连以及断服务器重连STM32向服务器端口发送对应指令 抽象理解…

硬件电路设计--运算放大器(二)选型

文章目录 前言一、运算放大器的工艺决定Vos和Ib二、TI放大器的命名规律三、选型总结 前言 一、运算放大器的工艺决定Vos和Ib 运放的设计工艺对其各种指标有非常重要的影响 常常有三种基本工艺&#xff1a; Bipolar: 低输入阻抗&#xff0c;Ib1-100nA:Vos10-100uV,低至0.1uV/o…

惊艳!全网首份“架构师成长笔记”GitHub狂澜9000星

其实架构师是需要一个相对而言对架构师友善的环境。第一&#xff0c;架构师到底需要什么&#xff1f;一个架构师要成长&#xff0c;首先他需要信任&#xff0c;第二他需要授权&#xff0c;第三他需要时间&#xff0c;第四他需要资源&#xff0c;少一样都很难开展工作。如果一个…

NIO-Selector 网络编程

目录 一、阻塞 & 非阻塞 1、阻塞 2、非阻塞 二、selector 1、连接和读取 2、处理客户端断开 3、处理消息的边界 4、ByteBuffer大小分配 三、多线程优化 四、NIO vs BIO 1、stream vs channnel 2、IO模型 阻塞IO 非阻塞IO 多路复用 异步IO模型 一、阻塞 &am…

使用OpenCV检测两张图片的关键点并计算关键点的描述子

#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/highgui/highgui.hpp>

每日一博 - 探索代码世界的地图 code iris

文章目录 地址特性安装 code iris如何使用 地址 https://plugins.jetbrains.com/plugin/7324-code-iris 特性 This plugin visualizes the modules, packages and classes of your project. It’s like a UML based “Google Maps” for your Source Code. Code Iris does…

zabbix代理服务器,高可用,监控java,windows,SNMP

zabbix 一&#xff1a;代理服务器1.设置 zabbix 的下载源&#xff0c;安装 zabbix-proxy2.部署数据库&#xff0c;要求 MySQL 5.7 或 Mariadb 10.5 及以上版本2.1.初始化数据库2.2.创建数据库并指定字符集2.3.创建 zabbix 数据库用户并授权 3.导入数据库信息4.修改 zabbix-prox…

前端项目请求天地图地址报错跨域;报错418

原因是因为转义字符&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 在请求回来的地址中 给他转化一下再次请求就OK了&#xff01;

oracle 使从表中随机取出一行记录数据

select * from (select rownum no, a.* from a where status_code AVAILABLE and id_type MEM and archive_flag N and rownum<1000000 ) where no >1000000-1 for update 随机取一条&#xff0c;锁住记录&#xff0c;操作完archive_flag Y不会再取。 四种解决…

【动态规划算法】第八题:931.下降路径最小和

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法\&#x1f384; 如 果 你…

PqQt实现对数据库的添加,删除,修改(完整过程演示)

在PyQt中设置的如下的窗口&#xff1a; 其中的图标是通过新建Resource File加入的 images里面的图片可以在这里面取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1gOgBpW7s-ZWn_5aRoaYLkQ 提取码&#xff1a;jyjy 我们把这个文件取名为res.qrc 资源文件的使用可以…

基于matlab显示城市街区场景中配备立体摄像机的无人机开发视觉SLAM算法(附源码)

一、前言 视觉SLAM是计算摄像机相对于周围环境的位置和方向&#xff0c;同时映射环境的过程。开发可视化 SLAM 算法并评估其在不同条件下的性能是一项具有挑战性的任务。最大的挑战之一是生成相机传感器的地面实况&#xff0c;尤其是在户外环境中。使用仿真可以在各种场景和相…

HarmonyOS学习路之开发篇—数据管理(分布式文件服务)

分布式文件服务概述 分布式文件服务能够为用户设备中的应用程序提供多设备之间的文件共享能力&#xff0c;支持相同帐号下同一应用文件的跨设备访问&#xff0c;应用程序可以不感知文件所在的存储设备&#xff0c;能够在多个设备之间无缝获取文件。 基本概念 分布式文件 分布…

WebGIS 信息系统-Element项目实战

WebGIS 信息系统-Element项目实战 Element的安装OpenLayers的安装采用直接引用的方式配置开发环境下载Vue文件下载Element文件下载OpenLayers文件 Element的安装 在项目的根目录中&#xff0c;首先按下 Shift鼠标右键&#xff0c;在弹出的右键菜单中选择“在此处打开命令行窗口…

OpenCV 的 remap 函数改变图像中像素的位置

#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #

Spring Boot 中的 @Scheduled 注解是什么,如何使用

Spring Boot 中的 Scheduled 注解是什么&#xff0c;如何使用 引言 Spring Boot 是一个非常流行的 Java Web 开发框架&#xff0c;它提供了很多方便的功能&#xff0c;其中就包括了 Scheduled 注解。本文将会介绍 Scheduled 注解的基本用法&#xff0c;并附上代码示例&#x…

2023 最新「阿里」Java 高级工程师面试高频题

7月份快要过去了&#xff0c;也意味着金九银十快到了&#xff0c;不知道大家有没有发现今年的面试比之前的都难&#xff1b;去年因为疫情的原因压抑住程序员跳槽的想法&#xff0c;再加上现在 IT 行业内卷越来越严重&#xff0c;这两点原因导致今年的招聘市场非常难受&#xff…