ArrayList扩容机制~

67 篇文章 9 订阅
订阅专栏
ArrayList()//会使用长度为零的数组
ArrayList(int initialCapacity)//会使用指定容量的数组
public ArrayList(Collection<?extends E>c>//会使用c的大小作为数组容量

假设我们设置一个列表的最初容量为10,如下所示:

ArrayList<Integer> arrayList=new ArrayList<>(10);

使用add方法时,触发的扩容机制:

add(Object o)首次扩容为10,再次扩容为上次的1.5倍

那么当我们给该列表中添加一个元素时,如下所示:

在这里插入图片描述

随着我们一直添加,直到该列表存放不下,此时会发生,如下所示:

在这里插入图片描述

我们继续添加,此时的容量又无法满足了,继续扩容,但此时的容量大小为15,如果扩容为原来的1.5倍,是不是代表最终容量大小为22.5?

事实并非如此,其容量计算是这样的,先将当前的容量大小右移求出它的一半,再将所得的一半值与当前大小相加

15>>1
7
7+15
22

因此第二次扩容的最终容量大小为22

在这里插入图片描述

ArrayList前20次扩容规律如下:

在这里插入图片描述

使用addAll方法时,触发的扩容机制:

addAll(Collection c)//没有元素时,扩容为Math.max(10,实际元素个数),有元素时为Math.max(原容量1.5倍,实际元素个数)

当最初容量为0时:

例一:

在这里插入图片描述

输出的容量大小为10

在这里插入图片描述

例二:

在这里插入图片描述

输出的容量大小为11

在这里插入图片描述

上述的输出结果让我们很疑惑,为什么不是我们所想的15呢?原因是使用addAll方法时,它在扩容时,当原始容量不够时,它会将下次一定扩容后的容量大小与当前添加元素的个数进行对比,取较大值,例二中的原始容量为0,扩容后的容量为10,但是添加的元素个数为11个,因此,最终的容量大小为11

例三:

在这里插入图片描述

由于已存在了10个元素,那么此时容量大小为10,再使用addAll方法进行元素添加时,将扩容的大小为15,添加三个元素后的大小为13,最终的容量大小为15,如下所示:

在这里插入图片描述

例四:

在这里插入图片描述

由于已存在了10个元素,那么此时容量大小为10,再使用addAll方法进行元素添加时,将扩容的大小为15,添加三个元素后的大小为16,最终的容量大小为16,如下所示:

在这里插入图片描述

Java ArrayList的自动扩容机制示例讲解
08-26
今天小编就为大家分享一篇对Java ArrayList的自动扩容机制示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
ArrayList一次扩容量
qq_45325217的博客
03-15 979
ArrayList一次扩容量 ArrayList的初始容量设为10,在每次存入数据后会进行检查,如果超过容量最大值,则以原容量的1.5倍进行扩容 初始量:10 扩容一次:10*1.5=15 扩容两次:(10*1.5)*1.5=22.5 …
ArrayList list = new ArrayList(20)需要扩充几次
zsj_javaer的博客
06-06 3500
ArrayList list = new ArrayList(20)需要扩充几次
C#非泛型集合类-ArrayList数组扩容
weixin_34336526的博客
06-28 193
这是对ArrayList效率影响比较大的一个因素。每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。 例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的...
集合学习2——ArrayList扩容机制
contact97的博客
06-18 236
ArrayList是List接口的一个实现类,ArrayList中维护了一个Object类型的数组elementData。数据的存放就是放在这个elementData这个成员变量中。与数组存放指定长度的元素不同,elementData这个成员变量的长度是随着元素的存放动态地变化。该变化与ArrayList的初始构造方法有关。 当创建ArrayList对象时,如果使用的是无参数构造器,如上图的ArrayList(),则初始elementData的容量为0。第一次添加元素时,则elementData为10。当
(三)ArrayList扩容机制
dancer
10-26 1209
文章目录扩容机制(无参)10个元素以内的容器是怎么变化的?添加第11个元素的时候发生了什么?容器要扩容到Integer.MAX_VALUE +1的时候发生了什么?总结 扩容机制(无参) 10个元素以内的容器是怎么变化的? 1.继上述代码进行分析.我也是一直很迷,转不过来啊.主要是搞不清楚elementData.length和元素个数质检的关系了 elementData.length是这个容器的大小...
ArrayList扩容机制源码解析.md
12-06
本资源根据个人学习和总结,主要介绍JavaArrayList扩容机制源码的解析,主要包含文字和代码等内容,以源码的形式进行分析,详细介绍了ArrayList扩容机制的整个流程,特此将该资源分享
浅谈ArraryList扩容机制
12-21
阅读本文大约需要10分钟,将分成两部分解读ArrayList扩容机制,源码部分来源于JDK8。 首先,挖个坑:为什么要尽量指定集合大小? 集合初始化 集合初始化有两种方式,直接new,或者在new的时候指定集合大小 List ...
ArrayList的自动扩充机制实例解析
08-29
本文主要介绍了ArrayList的自动扩充机制,由一个题目切入主题,逐步向大家展示了ArrayList的相关内容,具有一定参考价值,需要的朋友可以了解下。
Java进阶课程系列之ArrayList集合底层源码实战分析
06-16
ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。另外,由于 ArrayList 底层基于数组实现,所以其可以保证在?O(1)?复杂度下完成随机...
ArrayList 集合扩容
qq_45981503的博客
05-10 2330
ArrayList 初始容量:10 扩容因子:1,当容量达到上限后才会触发扩容。 扩容公式:新容量 = 旧容量/2 + 旧容量 + 1 比如:初始容量为4,其容量的每次扩充后的新容量为:4->7->11->17->26->... 即每次扩充至原有基础的1.5倍 Vector 初始容量:10 扩容因子:1,当容量达到上限后才会触发扩容。 扩容公式:old*2 如:一次扩容为20、二次扩容为40 HashSet 初始容量:16(Hashset是基于Has..
ArrayList 扩容
weixin_34405557的博客
05-31 289
处理容量是0, 第一次add的时候扩充到10 int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容50% 变成 1.5倍 第二次扩充到10 + 10 >>2 = 15. 转载于:https://www.cnblogs.com/webglcn/p/10954147.html...
Java学习 | ArrayList扩容的扩容问题
给我一根筷子,我能撬动整个地球
11-06 2535
先看一个问题: ArrayList list = new ArrayList(20) 中的list扩容了几次? 答案:扩容了0次,我认为这题考的就是对ArrayList源码有没有了解。 ArrayList在构造的时候是不涉及到扩容问题的,拿个构造方法,你问我扩容了几次,这不是在耍流氓么。 看过ArrayList源码你会发现,在ArrayList类的三个构造方法中,只涉及到ArrayList底层所使用的对象数组(elementData)的初始化: 显示指定容量不为零,则直接将 elementData 初始化
关于ArrayList()集合扩容的问题
ss449988的博客
10-24 1213
ArrayList arr = new ArrayList(100);一共扩容了多少次? 答案:扩容了0次 ArrayList arr = new ArrayList(); 默认扩容了0次,只有加入第一个元素后才默认扩容了10次,以后每次按1.5倍扩展。 例如:101.5=15; 151.5=22; 22*1.5=33; 另外其他集合扩容都不一样,需另外参考。 ...
关于ArrayList和HashMap的扩容因子以及扩容大小
最新发布
weixin_52606787的博客
07-19 479
ArrayList的扩容因子为1.5,所以扩容1.5倍,我很疑惑,扩容因子不是用来控制 ArrayList什么时候扩容的吗?和它扩大几倍没有关系。那HashMap的扩容因子默认为0.75,如果用来表示扩大几倍它岂不是还要缩小?
JAVA-基础知识-ArrayList扩容
横行的螃蟹的博客
10-21 266
JAVA-基础知识-ArrayList扩容 ArrayList是一个常用类,由数组实现,查询可在常数时间内实现,虽然在非结尾增删上效率不如LinkedList,但查询效率高,相对于vector,ArrayList是线程不安全的(可以通过Collections.synchronizedList()实现线程安全),所以更适用单线程环境。 大概介绍: ArrayList扩容机制,在添加第一个元素时创建...
ArrayList
iffy
02-22 77
初始化 //初始化一个object数组 长度为0 public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; ...
ArrayList扩容机制
Xjzzon的博客
11-19 137
ArrayList扩容机制 默认构造函数,初始一个容量为10的数组elementData,但实际上这个数据在第一次加入后才回去申请10个内存空间,就是说第一次加入就会扩容为10。 下面看看第一次加入元素时,如何扩容的。 public boolean add(E e) { //添加元素之前,先调用ensureCapacityInternal方法 // 第一次加入时,size为0,size+1即为1 ensureCapacityInternal(size + 1); // I
arraylist扩容机制
05-23
ArrayList 是一个动态数组,具有自动扩容的功能。当 ArrayList 中的元素数量超过其容量时,会自动扩容。ArrayList 扩容的机制如下: 1. 初始化容量:ArrayList 在创建时会默认分配一个容量大小,一般为 10 或 16。 2. 添加元素:当向 ArrayList 中添加元素时,如果当前元素数量已经达到容量大小,就需要进行扩容操作。 3. 扩容机制ArrayList扩容机制是每次扩容都会增加当前容量的一半。例如,如果当前容量为 10,那么下一次扩容后容量变为 15(10 + 10/2),再下一次扩容后容量变为 22(15 + 15/2),以此类推。 4. 复制数组:扩容时,ArrayList 会创建一个新的数组,将原数组中的元素复制到新数组中,并更新 ArrayList 的容量和数组引用。 5. 注意点:ArrayList 的扩容操作比较耗时,所以在使用 ArrayList 时,尽可能预估需要存储的元素数量,避免频繁扩容。同时,如果已知元素数量较大,可以通过初始化容量来减少扩容次数,提高性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • python文件的操作和异常之异常 13178
  • C语言之十进制转化为十六进制 13160
  • C语言之数组的定义及其使用方法 12485
  • 数据结构之静态链表 11936
  • C语言之根据摄氏温度求华氏温度 9951

分类专栏

  • 自动化测试 1篇
  • mistakes 55篇
  • 面经 2篇
  • JavaSE基础 41篇
  • 测试 1篇
  • 数据库 6篇
  • c语言 61篇
  • python 52篇
  • 数据结构 19篇
  • Java面试题 67篇
  • Javaweb基础~ 16篇
  • 蓝桥杯学习笔记 16篇
  • 设计模式 11篇
  • Redis 3篇
  • git 1篇
  • 多线程 6篇
  • JVM 7篇
  • Linux 2篇
  • MongDB 1篇
  • MybatisPlus 3篇
  • mybatis 14篇
  • SSSM 29篇
  • 计算机网络

最新评论

  • IDE实用小技巧之快速的将某一段代码抽离为一个方法~

    从未止步..: 学到啦表情包表情包

  • IDE实用小技巧之快速的将某一段代码抽离为一个方法~

    bjw1999: ctrl+alt+m,利用快捷键也很方便哦

  • 你知道什么是Charles吗?

    阿莫 夕林: 博主文章写的十分细致,结构严谨。感谢博主分享,期待博主持续输出好文。

  • 你知道什么是Charles吗?

    橙子味冰可乐: 文章的结构清晰,逻辑性强,对技术点的讲解非常有帮助。希望作者能继续分享更多专业知识。

  • 你知道什么是Charles吗?

    程序猿进阶: 什么是Charles?

大家在看

  • Redis篇——带你认识和了解Redis主从复制原理,一篇文章帮你搞定!
  • 共生共赢,信创未来 | 宝兰德将亮相2024信创联盟解决方案与最佳案例分享会
  • 开放式耳机哪款好?五大公认王牌机型汇总!
  • x264帧级码率控制解析
  • 简单了解java内部类

最新文章

  • 你知道Selenium自动化测试中有几种方法可以实现元素定位?
  • 探索移动云服务:构建高效移动互联网应用的最佳实践
  • 解决使用selenium进行自动化测试出现的错误~
2024年21篇
2023年217篇
2022年186篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从未止步..

谢谢你的打赏,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司汕头网站排名优化公司朝阳百度网站优化排名价格邯郸网站定制公司坪山网站建设设计报价聊城网站设计报价海北企业网站建设公司铜川seo公司石岩网站推广系统哪家好徐州网页制作哪家好清徐网络推广推荐通辽关键词按天收费价格伊犁外贸网站设计报价盘锦seo排名哪家好邵阳网站设计模板莱芜如何制作网站价格南昌网站优化价格林芝网站优化价格长沙关键词按天计费价格襄阳关键词排名价格秦皇岛模板推广哪家好黄冈关键词按天收费价格云浮关键词按天收费价格甘孜网络推广价格大丰网站制作推荐盘锦网站推广工具哪家好保定关键词按天收费公司南京网站推广工具多少钱和县百度标王价格塔城百度竞价哪家好杭州百度关键词包年推广价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化