栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ArrayList扩容源码分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList扩容源码分析

ArrayList扩容源码分析

size:数据的长度


先对数组长度+1,确保长度


判断当前数组是否为DEFAULTCAPACITY_EMPTY_ELEMENTDATA,之前就强调了无参构造时才会返回这个数组。所以,若创建ArrayList时调用的是无参构造,此方法会返回DEFAULT_CAPACITY(值为10)和minCapacity的最大值,因此,最终会返回固定值10;若创建ArrayList时调用了有参构造,则此方法会返回1
判断是否需要扩容,首次进来时。数组长度为0,最小扩容量为1.成立后进入扩容。然后存入elementDdata中并且初始化长度为10.返回元素集合。第二次进入此方法时。因为elementData长度为10,minCapacit长度为2。条件不成立所以不会进行扩容。直到11次添加时。进行扩容。扩容方法:获取上次元素数据的长度,然后新长度为原来元素数据的长度的1.5倍。int newCapacity = oldCapacity + (oldCapacity >> 1); 新长度=上次元素长度+(上次元素长度/2)。然后放入新的数组中入,并返回。
总结:
1:首先会记录真实数据的长度值。
2:然后首次进入会拿到最小长度。
3:判断最小长度是否大于元素数据长度。如果大于则进行扩容。
4:扩容:之前元素数据长度的1.5倍然后在判断新数组长度是否>数组的最大长度。如果大于则判断最小长度是否大于数组最大长度。如果大于就最小长度否则就是最大长度。然后copy进新的数组中。返回当前新数组。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号