trimtosize()在元素数量远小于数组容量时调用才有效,如初始容量100只存3个元素或多次remove后容量未缩容;适用于新增基本完成、后续以读为主或内存敏感的场景。

ArrayList 的 trimToSize() 方法能将内部数组容量缩小到当前元素个数,释放未使用的内存空间。它不改变元素内容,只调整底层数组大小,适用于添加操作基本结束、后续以读为主或对内存敏感的场景。
什么时候调用 trimToSize 有效
该方法只有在 ArrayList 实际元素数量远小于当前数组容量时才有意义。例如:初始容量为 10,但最终只存了 3 个元素;或者经过多次 remove() 后元素大幅减少,但数组没自动收缩。
- 新增操作已基本完成(比如一次性加载完数据后)
- 明确知道后续不会频繁 add,且希望降低内存占用
- 集合长期存活,且元素数量稳定偏少
怎么正确调用 trimToSize
直接调用实例方法即可,无需参数:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
ArrayList<string> list = new ArrayList(100); // 初始容量设为 100
list.add("a");
list.add("b");
list.add("c");
list.trimToSize(); // 此时内部数组长度变为 3</string>
调用后,list.size() 不变,但 list.capacity()(虽无此 public 方法)实际等同于 size,可通过反射或估算确认。
注意点和常见误区
-
trimToSize()是 非同步、无返回值 的 void 方法,不能链式调用 - 它 不会触发扩容,只做“缩容”,且仅当当前容量大于 size 时才真正复制数组
- 频繁增删场景下不建议反复调用,因为数组复制有开销
- 如果之后又执行
add(),仍会按默认增长策略(1.5 倍)重新扩容
替代思路:初始化时预估容量
比起事后 trim,更高效的方式是在创建时就指定合理初始容量:
- 已知元素总数:直接传入精确值,如
new ArrayList(500) - 大致范围:略高估一点,避免早期频繁扩容(如预计 400~450,可设 480)
- 配合
ensureCapacity(int minCapacity)在批量添加前预留空间
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










