ArrayList中的ensureCapacity(int n)方法可以对ArrayList底层的数组进行扩容
ArrayList的扩容规则是变成原来最大容量的1.5倍+1
意思就是 若参数值大于底层数组长度的1.5倍,则数组的长度就扩容为这个参数值;若小于底层数组长度的1.5倍,则数组长度就扩容为底层数组长度的1.5倍。
若ArrayList中要添加大量元素,则使用ensureCapacity(int n)方法一次性增加,可优化运行效率
public class EnsureCapacityTest {
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
final int N =10000000;
long startTime = System.currentTimeMillis();
for(int i = 0;i<N;i++) {
list.add(i);
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
list = new ArrayList<Object>();
long startTime1 = System.currentTimeMillis();
list.ensureCapacity(N);
for(int i = 0;i<N;i++) {
list.add(i);
}
long endTime1 = System.currentTimeMillis();
System.out.println(endTime1-startTime1);
}
}
运行结果:
4747
233
可看出使用ensureCapacity()方法大大增加运行效率
如果已经预知容器可能会装多少元素,最好显示的调用ensureCapacity这个方法一次性扩容到位。