ensureCapacity对低层数组进行扩容,加快数组的添加数据
作者:互联网
两者添加的过程:
普通添加:数组一边添加数据一边进行数组的扩容;
ensureCapacity添加:一开始就给数组进行扩容,之后直接添加数据无需再进行扩容;
-----普通数组添加数据
public static void main(String[] args) {
final int N=100000000;
Object obj=new Object();
ArrayList list1=new ArrayList();long start=System.currentTimeMillis();
for(int i=0;i<N;i++){
list1.add(obj);
}
System.out.println(System.currentTimeMillis()-start);}
-----使用ensureCapacity添加数据
public static void main(String[] args) {
final int N=100000000;
Object obj=new Object();
ArrayList list1=new ArrayList();
ArrayList list2=new ArrayList();
long start2=System.currentTimeMillis();
list2.ensureCapacity(N);//显示的对低层数组进行扩容
for(int i=0;i<N;i++){
list2.add(obj);
}
System.out.println(System.currentTimeMillis()-start2);
}
为了不让两者互相影响运行,所有在这里分开运行;
都分别测试了:(单位是条)
普通数组添加数据运行时间 | ensureCapacity添加数据运行时间 | |
十万 | 6 | 6 |
百万 | 12~13 | 10 |
千万 | 97~103 |
30~35 |
亿 | 630~640 | 250~270 |
从表格中可以看出使用ensureCapacity是比较快的,如果是几亿条数据那个超出了堆栈内存,测试不了,有想了解就自己去测试一下,在测试的时候建议分开测试,一起测试影响后面测试的结果,导致第二个添加数组时间会加长;ensureCapacity也是比较少使用的,毕竟使用数组添加超过千万条的数据比较少;
如果扩容的大小比实际添加的数据量要少也是没有问题的,只是超出部分会进行跟普通添加一样的操作,超出部分是一边扩容一边添加;如果扩容太小而数据量太大反而会比正常数组添加慢(扩容量远远小于实际数据量才会发生这样的情况),因为扩容也是需要一定时间的;但是也不会差别太大;
标签:扩容,低层,System,ensureCapacity,添加,数组,ArrayList 来源: https://blog.csdn.net/weixin_44544885/article/details/94838784