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添加数据运行时间
十万66
百万12~1310
千万97~103

                               30~35

亿630~640250~270

 

从表格中可以看出使用ensureCapacity是比较快的,如果是几亿条数据那个超出了堆栈内存,测试不了,有想了解就自己去测试一下,在测试的时候建议分开测试,一起测试影响后面测试的结果,导致第二个添加数组时间会加长;ensureCapacity也是比较少使用的,毕竟使用数组添加超过千万条的数据比较少;

如果扩容的大小比实际添加的数据量要少也是没有问题的,只是超出部分会进行跟普通添加一样的操作,超出部分是一边扩容一边添加;如果扩容太小而数据量太大反而会比正常数组添加慢(扩容量远远小于实际数据量才会发生这样的情况),因为扩容也是需要一定时间的;但是也不会差别太大;

 

 

 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值