扩容规则
1. ArrayList() 无参构造扩容
2. ArrayList(int initialCapacity)扩容
3. public ArrayList(Collection<? extends E> c) 扩容
4. add(Object o)扩容
5. addAll(Collection c) 扩容
要注意的是,以下所有代码中用反射方式来更直观地反映 ArrayList 的扩容特征,但从 JDK 9 由于模块化的影响,对反射做了较多限制,需要在运行测试代码时添加 VM 参数 --add-opensjava.base/java.util=ALL-UNNAMED 方能运行通过
扩容规则
1. ArrayList() 无参构造扩容
ArrayList() 无参构造会使用长度为零的数组
2. ArrayList(int initialCapacity)扩容
ArrayList(int initialCapacity) 使用指定容量的数组初始化ArrayList()3. public ArrayList(Collection<? extends E> c) 扩容
public ArrayList(Collection<? extends E> c) 会使用 c 集合 的大小作为数组容量
4. add(Object o)扩容
add(Object o) 首次扩容为 10,再次扩容为上次容量的 1.5 倍(使用移位相加的规则即(原容量 > > 1 ) + 原容量 (原容量>>1)+ 原容量(原容量>>1)+原容量 )
无参构造ArryList()
首次添加元素a
当数组容量满时添加b
5. addAll(Collection c) 扩容
addAll(Collection c) 没有元素时,扩容为 Math.max(10, 实际元素个数),有元素时为 Math.max(原容量 1.5 倍, 实际元素个数)
原文链接:https://blog.csdn.net/qq_52006948/article/details/127326420
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!