一、ensureCapacity()方法是什么?
ensureCapacity()是 ArrayList 源码中的方法,是提供给用户调用的
二、ensureCapacity()方法能做什么?
- 在 ArrayList.add操作 大量元素之前用 ensureCapacity 方法,以减少 增量重新分配1的次数。
- 自定义扩容倍数(默认是1.5倍),这是我推理出的作用(仅供讨论)
三、分析推理过程
首先减少增量重新分配的方法我所知的有两种:
- new ArrayList(初始化容量)初始化容量
- ensureCapacity方法
两种方法执行add后的效率差不多,初始化容量的效果好像略好点。
然而 !
ensureCapacity方法的优点在于可以多次定义ArrayList数组容量
因为
ensureCapacity方法源码里 就执行了grow方法(ArrayList扩容核心方法)。
ensureCapacity方法源码:
public void ensureCapacity(int minCapacity) {
int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
// any size if not default element table
? 0
// larger than default for default empty table. It's already
// supposed to be at default size.
: DEFAULT_CAPACITY;
if (minCapacity > minExpand) {
ensureExplicitCapacity(minCapacity);
}
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
// ArrayList扩容核心方法
grow(minCapacity);
}
四、结论
以上是知道要add多少条数据的情况,但实际开发过程中不知道数据多少的情况 又想效率高怎么办呢?
使用ensureCapacity()方法在每次新增大量数据前,自定义提升数组容量
没必要默认1.5倍提升,你可以根据实际情况,自定义一个更高的倍数
增量重新分配: 简单理解就是 ArrayList扩容操作,但每次操作都是全量拷贝操作,消耗资源,影响执行效率。 ↩︎
版权声明:本文为qq_24283811原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。