ArrayList——ensureCapacity()提高ArrayList的初始化速度

转载 2016年08月31日 09:51:56

转自http://java-admin.iteye.com/blog/1061499

在使用Arraylist时,经常要对它进行初始化工作,在使用add()方法增加新的元素时,如果要增加的数据量很大,应该使用ensureCapacity()方法,该方法的作用是预先设置Arraylist的大小,这样可以大大提高初始化速度。

public class EnsureCapacityTest {

	public static void main(String[] args){   
        final int N = 1000000;   
        Object obj = new Object();   
           
        //没用调用ensureCapacity()方法初始化ArrayList对象   
        ArrayList list = new ArrayList();   
        long startTime = System.currentTimeMillis();   
        for(int i=0;i<=N;i++){   
            list.add(obj);   
        }   
        long endTime = System.currentTimeMillis();   
        System.out.println("没有调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");   
           
        //调用ensureCapacity()方法初始化ArrayList对象   
        list = new ArrayList();   
        startTime = System.currentTimeMillis();   
        list.ensureCapacity(N);//预先设置list的大小   
        for(int i=0;i<=N;i++){   
            list.add(obj);   
        }   
        endTime = System.currentTimeMillis();   
        System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");   
    }   


}


测试结果

没有调用ensureCapacity()方法所用时间:22ms
调用ensureCapacity()方法所用时间:9ms

结果显而易见,在N的值很大的时候,使用ensureCapacity()方法可大大提高效率;而当N的值较小时,则所用时间差距不明显

相关文章推荐

数组的自动扩容问题

一维数组的自动扩容;import java.util.Arrays;public class IntList { public static final int DEFAULT_ARRAY_CO...

关于java数组的扩容问题

这是一个java数组实例,对一个顺序数组插入一个数。很明显直接插入是不行的,因为java中数组是固定的,不变是不能动态扩容的,想要插入一个数必然要重新创建一个数组,其长度比原数组大,然后对其进行拷贝,...

《Java源码分析》:LinkedHashMap

《Java源码分析》:LinkedHashMap最近也即将要参加校招,因此,就准备花几天的时间专门来将我们用的比较多的集合类的源码都看下,并以写博客的形式来记录相关思路。便于以后复习。前面刚看了下Ha...

ArrayList中ensureCapacity的使用与优化

对于ArrayLis中有一个方法ensureCapacity(int n),这个方法可以对ArrayList低层的数组进行扩容,显示的调用这个函数,如果参数大于低层数组长度的1.5倍,那么这个数组的容...

理解区块链

本文基本上是收集的内容汇总,略微全面一点 1、区块链的诞生 互联网上的贸易,几乎都需要借助可资信赖的第三方信用机构来处理电子支付信息。这类系统仍然内生性地受制于“基于信用的模式”。区块链技术是构建比特...
  • csolo
  • csolo
  • 2016-10-19 14:36
  • 6932

GetCurrentTime(),GetLocalTime(),GetSystemTime()之间的区别

1. GetCurrentTime()     GetCurrentTime()只和16位版本的windows兼容,在32位windows下最好用gettickcount(); 2. Ge...

LinkedHashMap

public class LinkedHashMap  extends HashMap  implements Map  LinkedHashMap是Map 接口的哈希表和链接列表实现,具有可预...

System.arraycopy实现数组扩容,ArrayList阅读记录

数组被定义以后不能再将length重新增大,但我们可以是有拷贝的方法进行扩容。 主要使用的函数——System.arraycopy(arr3, insertedIndex, arr3, insert...

【比特币】比特币的产生原理、运作方式、特点、区块链等

参考链接:一文读懂比特币产生原理、运行方式、特点、区块链等 摘要:要近期比特币已经成为主流讨论的热门话题,自8月12日突破4000美元以来,比特币的价格达到了前所未有的高点。根据CoinDesk比...

区块链的“孪生姐妹”——Tangle

IBM曾在其具有里程碑式意义的研究报告《设备民主》中指出:未来几年中,当相互连接的物联网设备数量从几十上百亿逐步增长到成千上万亿级别的时候,物联网的发展将遇到连接成本、网络信任,以及基于互联设备之上被...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)