List底层源码剖析之List扩容机制

news2025/1/18 3:17:28

在list集合中有一个add方法:

 

在众多类中,最长使用的是ArrayList,其中有个方法是add方法

在add方法底层存在

private int size;

ensureCapacityInternal(size + 1)

其中的size+1会对add()方法的调用次数进计数,每调用一次加1;

下边有个数组是elementData[] 中的size++,用来确定存储对象的位置

 

 在ensureCapacityInternal方法中,定义了一个minCapacity (最小容量)的参数

 如果最小容量比数组长度大,那么调用grow方法更新数组

 1.指定一个初始的数组长度为10,将数组长度传给初始容量

2.初始化了一个新的容量是初始容量的1.5倍

如果入参长度小于新的容量那么,数组长度扩容为初始的1.5.倍

如果入参长度大于新的容量那么就把入参长度作为数组长度,

如果还不够,那么就会传给一个int的最大范围

如果int最大范围还不够,会传Integer.MAX_VALUE给这个数组,

其中  MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

 总结一下:

MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8

list底层创建了一个elementData数组,长度为10,

创建了一个oldcapacity(初始容量)用来记录数组长度

创建了newcapacity(新容量)的长度为初始容量的1.5倍;

用方法ensureCapacityInternal中的minCapacity(最小容量来接收传入elementData数组的长度,当最小容量小于elementData数组的初始化长度(10)的时候,使用默认长度,当最小容量大于初始化长度,那么使用Arrays.copyOf方法elementData数组长度扩容为原来1.5倍,如果1.5倍还是不够那么最小容量是多少就给定多大的elementData的长度,如果并且被付给的新容量达到了比MAX_ARRAY_SIZE还大的程度,就会把Integer.MAX_VALUE的值付给elementData(将该数组扩容到最大)

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

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

相关文章

Docker系列(常用命令) 02

Docker常用命令总结 docker官方命令文档 一、Docker环境信息命令 docker version # 查看docker版本信息 docker info # 查看docker详细信息二、系统日志信息常用命令 2.1 docker events 作用:从服务器获取实时事件,比如:启动、关闭和创…

九龙证券|美国散户疯狂抄底,嗅到了什么?华尔街最新警告

当地时间周五,美股三大指数低开后经历“过山车”行情,虽然盘中一度转涨,但午后再度回落。截至收盘,道指跌0.38%,报收33926.01点;纳指跌1.59%,收于12006.95点;标普500指数跌1.04%&…

九龙证券|全市场注册制下 多层次资本市场定位更清晰

全商场施行注册制的启动,让多层次本钱商场各个板块之间的定位愈加明晰。沪深交易所主板将杰出大盘蓝筹定位,各个板块互联互通也在逐渐加强。 分析人士认为,全面施行股票发行注册制是一场触动本钱商场全局的革新。注册制在全商场推广后&#x…

解读测试能力素质模型

软件测试的能力素质模型(Job Model),是对不同层级测试工程的能力要求进行明确的定义。目的是为了对每位工程师的能力进行科学的评估,然后分配合理的工作,也帮助大家明确职业规划的方向。 淘宝测试工程师的最常用的有4个,分别是&am…

uniapp(一)

一、初识微信小程序1、什么是微信小程序微信小程序简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用小程序是一种新的开放能力,开发…

【Redis学习笔记】主从复制

读写分离,性能扩展;快速容灾恢复 一主两从 准备一台服务器,启动不同的redis端口,6379、6380、6381 连接redis-cli redis-cli查看主从信息 info replication主机6379 从机6380、6381 设置从机 config set masterauth password -…

【青训营】架构初探

单机架构 单机架构是把所有功能都实现在一个进程里,并且部署在一台机器上。优点是简单,但是缺点在于其能够承载的带宽有限,而且进行运行维护必须关停服务器。模块之间相互影响, 单体架构 单体架构和单机架构最大的不同是单体架构…

【JavaEE】认识Tomcat

✨哈喽,大家好,我是辰柒!✨ 🛰️🛰️系列专栏:【JavaEE】 ✈️✈️本篇内容:如何构造 HTTP 请求同时认识HTTPS! 🚀🚀代码存放仓库github:JavaEE代码! ⛵⛵作者…

排序模型进阶-WideDeepWDL模型导出

8.5 排序模型进阶-Wide&Deep 学习目标 目标 无应用 无 8.5.1 wide&deep Wide部分的输入特征: raw input features and transformed featuresnotice: W&D这里的cross-product transformation:只在离散特征之间做组合,不管是文本…

《从0开始学大数据》之构建一个大数据平台

在分布式系统中分发执行代码并启动执行,这样的计算方式必然不会很快,即使在一个规模不太大的数据集上进行一次简单计算,MapReduce 也可能需要几分钟,Spark 快一点,也至少需要数秒的时间。而互联网产品处理用户请求&…

微信短视频怎么提取gif?三步教你在线提取gif动画

现在各大社交软件上短视频是越来越多,为了方便传播、保存可以将短视频制作成GIF。那么,如何从视频中提取动图呢?很简单,两招就能完成在线视频转换成gif动图的操作,只需要使用【GIF中文网】的视频转gif(http…

OBS使用WebRTC进行腾讯云推流播流

推流: 首先:OBS想要推送WebRTC格式的推流需要满足以下两点: 1:OBS版本在26及以上 2:需要给OBS安装腾讯云插件,而且只支持Windows版。 OBS下载地址:Download | OBSDownload OBS Studio for W…

电路方案分析(十六)带有C2000微控制器且精度为 ±0.1° 的分立式旋转变压器前端参考设计

带有C2000微控制器且精度为 0.1 的分立式旋转变压器前端参考设计 tips:参考Ti设计资源:TIDA-01527 旋转变压器详细介绍: https://blog.csdn.net/qq_41600018/article/details/127597875?spm1001.2014.3001.5501 该参考方案设计…

用投资思维做好招商工作:湘商回归,长沙急企业之所急

在中国经济发展40年后,当下经济发展的底层逻辑已发生了根本性变化。企业发展所面临的问题,投资所思考的方向也已不同以往。一味再强调本地资源优势,介绍当地优惠政策的招商工作方式不再适应当下形式,往往反而会导致忽略企业的真实…

58.Isaac教程--OTG5 直线运动规划器

OTG5 直线运动规划器 ISAAC教程合集地址文章目录OTG5 直线运动规划器最大值和期望值的配置OTG5 的 Flatsim 演示用于直线运动的在线轨迹生成 - V 型 (OTG5) 规划器允许线性运动,同时明确防止曲线。 这在即使与一般直线运动方向有轻微偏差也会导致意外结果的情况下很…

Redis核心技术-高可靠-集群方案(客户端分片、代理分片、Redis Cluster)

Redis在3.0版本前只支持单实例模式,虽然Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版。 各大企业等不急了,在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各…

【每日一题】【LeetCode】【第二十四天】【Python】两个数组的交集 II

解决之路 题目描述 测试案例(部分) 第一次 顺着“两个数组的交集”的思路想,先用集合处理nums1和nums2,然后通过“交集”运算得出列表res,然后循环检查列表res,得出各个元素在两个数组中出现的最小次数&…

2022生化原理I复习资料汇总

文章目录1.2022复习重点及参考题2022年考试复习题:附录:参考答案及复习重点2.2021复习重点及参考题3.往年复习重点及参考题汇总4.复习重点整理及考试题型生化原理I复习资料及往年考题1.2022复习重点及参考题 2022年考试复习题: 1.2021-2022…

Python Stock安装与使用

这个是使用python 开发股票系统。 使用 tushare 获取股票数据,然后使用tornado 进行web 展示。 使用pandas numpy 数据处理。 项目代码 项目代码放到github上面 GitHub - pythonstock/stock: stock,股票系统。使用python进行开发。 因为为了简单&#x…

【Netty学习】七、详解ByteBuf缓冲区

七、详解ByteBuf缓冲区 为了确保引用计数不会混乱,在Netty的业务处理器开发过程中,应该坚持一个原则:retain和release方法应该结对使用。简单地说,在一个方法中,调用了retain,就应该调用一次release。 pub…