常量字段,表示默认容量
一个arraylist实例共占用20字节的内存(8字节的对象开销内存+12字节的实例信息),这不包括内部数组(_items)占用的空间。
给arraylist添加新元素时(比如调用addrange方法),需要超出arraylist的初始容量,arraylist将会自动扩大容量。arraylist的容量或者加倍或者增加到新的 count,取二者之中较大者,内部数组(_items)也被重新分配以容纳新元素,并且现有的元素被复制到新数组中。出于优化性能的考虑,如果预先知道长度,应该为arraylist分配足够的内存一避免不必要的复制。如果所有的数组元素都已经添加进去,并且不再对数组(_items)进行扩充,你应该调用toarray方法将它装换成类型安全的数组,这样,无论在内存使用还是性能上都得到极大的优化。
我们可以调用trimtosize方法来截去arraylist的未使用部分,这个方法实际上是执行一次元素复制。在调用trimtosize后,要真正的释放数组占用的内存,还要调用clear方法。要注意的是,在空arraylist上执行trimtosize方法是将arraylist的容量设置为默认容量,而不是零。需要注意的是,创建arraylist如果将容量设为0,clr将使用默认值16来创建。
arraylist类不是array类的一个完全的替代,我觉得arraylist比多维数组的性能要好得多,我将在另外一篇文章详细分析二者的区别,特别在性能方面。
|
|
array |
arraylist |
|
内存占用 |
值类型数组中的数据没有装箱,每个元素的长度等于相应的值类型的长度。 引用类型数组的每个元素的长度等于intptr.size
本文关键:数组 Array ArrayList .net
相关方案
|