其他分享
首页 > 其他分享> > ensureCapacity对低层数组进行扩容,加快数组的添加数据

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