转自:
http://topic.csdn.net/t/20061223/10/5250896.html
任何一个ArrayList对象都有一个capacity属性,用来指示该ArrayList的最小容量,用“容量”这个词容易引起像本贴楼主那样的误解,我觉得用“容纳能力”比较贴切。
我们知道ArrayList的内部是采用数组来存储元素的,由于java数组都是定长的,所以这个数组的大小一定是固定的,这个大小就是capacity。我们可以肯定capacity一定是大于或等于ArrayList的size,那么当size不断增加到了要超过capacity的时候,ArrayList就不得不重新创建新的capacity来容纳更多的元素,这时需要首先建立一个更长的数组,将原来的数组中的元素复制到新数组中,再删除原来的数组。可见当ArrayList越来越大时,这种操作的消耗也是越来越大的。
为了减少这种不必要的重建capacity的操作,当我们能肯定ArrayList大致有多大(或者至少会有多大)时,我们可以先让ArrayList把capacity设为我们期望的大小,以避免多余的数组重建。
假设ArrayList自动把capacity设为10,每次重建时将长度递增原来的三分之二,那么当我们需要大约存储50个元素到ArrayList中时,就会大约需要重建数组4次,分别是在增加第11、第17、第26、第39个元素的时候进行的。如果我们一开始就让ArrayList的capacity为50,那么不需要任何数组重建就能完成所有插入操作了。
java允许我们在构造ArrayList的同时指定capacity,如new ArrayList(50),也允许在以后将它设得更大,而增大capacity就是使用ensureCapacity()方法。注意:capacity只能比原来的更大,而不能比原来的更小,否则java会忽略该操作。ArrayList的初始默认capacity为10,所以给capacity指定小于10的整数是毫无意义的。
最后说说ArrayList的size,前面说过,size一定小于等于capactiy,而且更重要的是,访问超过size的位置将抛出异常,尽管这个位置可能没有超过capacity。ensureCapacity()只可能增加capacity,而不会对size有任何影响。要增加size,只能用add()方法。
分享到:
相关推荐
arrayliSt---listDemo
ArrayList-LinkedList-源码.rar
遍历ArrayList存入HashMap中
ArrayList、LinkedList、 Vector、Map 用法比较
该文件内容主要是关于LinkedList在新增/删除元素时效率是否比 ArrayList 高,对比插入和删除时需要花费的时间
编写一个查询类,输入学生学号,若该生在数据文件(test.txt)中存在,在JTextArea中显示该生信息 若该生在数据文件(test.txt)中不存在,显示”查无此人”,可反复查找.在输出中,能显示该生的总成绩和平均成绩,将显示结果...
ArrayList是list接口下一个底层用数组实现的典型list类,也就是传说中的动态数组,用MSDN的说法就是array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。...
036-sum-arraylist-bigdecimals-java8
java_latihan_crud-sort-arraylist-regex-
Array和ArrayList递归对于家庭作业,您编写了两种方法来练习递归。 您应该练习对所有这些问题使用递归! 对于所有这些方法,您都应该编写递归方法和包装器方法。 您可以调整递归方法的参数,但不要更改包装方法的...
Array和ArrayList递归 对于家庭作业,您编写了两种方法来练习递归。 您应该练习对所有这些问题使用递归! 对于所有这些方法,您都应该编写递归方法和包装器方法。 您可以调整递归方法的参数,但不要更改包装方法的...
ArrayList-LinkedList ArrayList和LinkedList的完整演示。 我们如何添加,删除和遍历列表
ArrayList-Examples
arraylist-carhashmap
Java中的ArrayList练习 涉及ArrayList和OOP的固定练习。 练习题 [对数组列表的介绍]编写一个程序,该程序采用ArrayList作为标准数据存储结构。 程序必须注册(无需用户交互)列表中的10个任何类型的值(字符串,整数...
ASP .NET - ArrayList对象ASP .NET - ArrayList对象ASP .NET - ArrayList对象ASP .NET - ArrayList对象
这里的数据是使用ArrayList存储的。菜单有一个父类(称为Command),还有多个子类(针对所有不同类型的命令),以便基于已解析文件中提供的命令使菜单动态化。 每种类型的命令都分配给一个菜单选项
Array to get files from server....
day14-ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 底层是数组实现的,长度可以变化 泛型的使用 ...