标签:扩容 1.5 10 ArrayList 数组 长度 底层
ArrayList底层的本质是数组,数组是适合查询的,因为数组每个元素的内存空间是固定的,每次查询时,只需要去查询对应位置的内存空间,就可以很快找到相应的值。而数组相对来说不擅长的是添加和删除。
集合长度
ArrayList<String> strings = new ArrayList<>(); strings.add("草莓");
底层代码:
可以看到创建对象时并没有初始化数组的长度,所以我们由此可以推断一下,是不是第一次添加的时候才进行的初始化
这里的if条件说明的是如果当前集合长度为空则调用max方法进行初始化长度
这里a就是传过来的DEFAULIT_CAPACITY常量10
由此可见,第一次扩容时是把集合长度设置为了长度为10
扩容机制:
由源码可知扩容是每次进行的是扩容原来的长度+原来长度右移一位计算后的结果总和,也就是每次扩容1.5倍
假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10 ;之后扩容会按照1.5倍增长。也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15;当添加第16个数据时,继续扩容变为15 * 1.5 =22个。
标签:扩容,1.5,10,ArrayList,数组,长度,底层 来源: https://blog.csdn.net/qq_45135666/article/details/120194783
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。