Java进阶 - [1-5] 集合容器
ArrayList
add
1、先确认是否需要扩容,如果需要,则进行扩容操作ensureExplicitCapacity
。
2、进行赋值 elementData[size++] = e
;
扩容
1、如果所需的最小容量大于elementData数组的容量,则进行扩容操作。
private void ensureExplicitCapacity(int minCapacity){
/* 变化次数加1 */
modCount++;
/* 如果所需的【最小容量】大于elementData数组的容量,则进行扩容操作 */
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
2、第一次扩容,扩容原有容量的一半(比如原有为10,扩容后容量为15)。
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
// 第一次扩容,扩容原有容量的一半(比如原有为10,扩容后容量为15)。
int newCapacity = oldCapacity + (oldCapacity >> 1);
// 新的长度newCapacity依然无法满足需要的最小扩容量minCapacity,则新的扩容长度为minCapacity
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
// 新的长度newCapacity超出了最大的数组长度MAX_ARRAY_SIZE,则申请更大的容量hugeCapacity()
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// 扩展数组长度为newCapacity,并且将旧数组中的元素赋值到新的数组中
elementData = Arrays.copyOf(elementData, newCapacity);
}
3、如果新扩容长度无法满足所需空间,则申请更大的容量
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
LinkedList
HashMap
— 要养成终生学习的习惯 —
分类:
【吗喽的搬砖日常】 / Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南