ArrayList没有公开的capacity()方法,其容量需通过反射获取elementData数组长度;推荐预设初始容量或调用ensureCapacity()来优化性能。

Java 中 ArrayList 本身没有“当前存储容量大小”这个概念,它只有两个关键数值:元素个数(size)和内部数组的长度(capacity)。你真正想查的,通常是后者——即底层 Object[] 数组的长度,也就是它当前能容纳多少元素而无需扩容。
如何获取 ArrayList 的 capacity(底层数组长度)
ArrayList 没有提供公开的 capacity() 方法,因为 capacity 是实现细节,官方不鼓励直接依赖。但你可以通过反射获取其内部 elementData 数组的长度:
- 获取
elementData字段(类型为Object[]) - 调用该数组的
.length
示例代码:
<font size="2"><pre class="brush:php;toolbar:false;">ArrayList<string> list = new ArrayList(); System.out.println(list.size()); // 0 // 添加一些元素触发扩容 for (int i = 0; i </string>
为什么不能直接用 public API 获取 capacity
这是设计使然:ArrayList 的扩容策略(如 1.5 倍增长)和初始容量可能随 JDK 版本变化。官方只保证 size() 和 ensureCapacity(int) 等行为契约,不承诺 capacity 的具体值或访问方式。依赖 capacity 容易导致代码脆弱、难以维护。
更推荐的做法:按需预设容量
如果你关心性能、想避免多次扩容,应在创建时就指定合理初始容量:
-
new ArrayList(16)—— 明确初始容量为 16 -
list.ensureCapacity(100)—— 提前预留空间,避免后续 add 时频繁复制
这样既可控,又无需反射,也符合封装原则。
注意 size 和 capacity 的区别
size() 返回实际元素个数(逻辑大小),是公开、安全、常用的方法。
capacity 是内部数组长度(物理大小),仅用于性能调优参考,非必要不建议获取或依赖。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











