黑马程序员技术交流社区
标题:
ArrayList() 的初始容量是指什么啊??
[打印本页]
作者:
韩慧阳
时间:
2012-5-9 17:04
标题:
ArrayList() 的初始容量是指什么啊??
毕老师说它是没有限制的,不像数组那样。
ArrayList
()
构造一个初始容量为 10 的空列表,这是API给的。如果ArrayList a1=new ArrayList();按照意思就是说当存入的对象超过10个那么a1的容量就会自增。 但是这个类有提供了另一种构造函数
ArrayList
(int initialCapacity)
构造一个具有指定初始容量的空列表。既然是可以自动增长空间的,JAVA又为什么要给这个构造方法呢?? 这两种方法在使用时JVM底层有不一样的地方吗?或者这两种在使用上的区别是什么啊??
我对这个初始容量的理解对吗?
作者:
云惟桉
时间:
2012-5-9 17:28
JVM运行的时候,操作系统给它分配的资源和空间是有限的。所以,对程序的优化和完善,除了运行效率和代码可读性强,空间的利用率是很关键的。
对于楼主提出的问题:
1.第一种构造方法提供的是默认的构造方式,那一般是程序员无法确定要存入数据的长度时用到的。
2.第二种构造方法,是程序员知道了自己需要用到的数据长度,指定长度等于或者稍微大于该长度的ArrayList,使得空间资源利用率较高。
对于这一点,java集合中也提供了另外一些机制和方法以供利用。比如:
ArrayList中有提供的一个函数ensureCapacity。
在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。
这可以减少递增式再分配的数量。也就是减少了利用不到的空间分配。
java是一种友好的编程语言,它再给我们提供便利工具的同时,也为效率做了基本的打算,而我们使用的时候就要去考虑它。
我们现在调试的还是小程序,当真正做项目的时候,利用到的空间和资源会更多,因此更实际的应该要考虑到效率问题,这就是其中一点。
希望能帮助到楼主。
作者:
蒋映辉
时间:
2012-5-9 17:35
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
如果你没有指定初始容量或指定的容量过小,系统就会一直自动分配,如果你指定的初始化容量刚好够用,就免去了这一步
作者:
黑马张立国
时间:
2012-5-9 17:56
这两个构造函数的实现,我想应该是这样的:
两构造函数底层实现了一个带参数的函数
底层函数有一个默认属性=10,
当无参数函数调用时,就用默认属性;
当有参数函数调用时,就把默认属性覆盖;
我想这两个函数区别不是很大吧
唯一的区别是当你知道集合的大体长度时可节省空间。
集合的增长是按一定比例,当你需要50个空间时,无参数的就可能曾大到了60或70
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2