转自:
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()方法。
分享到:
相关推荐
在Java编程语言中,ArrayList是集合框架中一个重要的类,属于List接口的实现。ArrayList主要用于存储有序的、可变大小的元素序列。本示例"arrayliSt---listDemo"显然是一个关于ArrayList基本操作和使用的演示。下面...
8. **容量操作**:`size()`返回列表中元素的数量,`ensureCapacity()`可以确保列表有足够空间以容纳更多元素。 9. **排序**:虽然ArrayList本身不提供排序功能,但可以使用Collections的`sort()`方法对列表进行排序...
- ensureCapacity(int minCapacity): 确保ArrayList的容量至少为指定值,如果不足则进行扩容。 - trimToSize(): 将ArrayList的容量调整为其实际元素数量,减少内存消耗。 7. 遍历ArrayList - 可以通过for-each...
- `ensureCapacity(int minCapacity)`:确保列表的容量至少为minCapacity,如果当前容量不足,会进行扩容。 6. **线程安全** - 如果需要在多线程环境下使用ArrayList,可以通过以下方式创建线程安全的版本: ```...
- `ensureCapacity(int minCapacity)`: 扩大数组容量以确保至少能容纳minCapacity个元素。 - `trimToSize()`: 将容量调整为实际元素的数量,释放多余的空间。 7. **遍历ArrayList** - 使用增强for循环(foreach...
- **Capacity 属性**:表示 ArrayList 的最大容量,可通过 `list.ensureCapacity(capacity)` 方法增加容量。 - **Count 属性**:返回 ArrayList 中的元素数量,只读属性。 - **Add、AddRange、Remove、RemoveAt、...
为了减少频繁的扩容操作,可以在创建ArrayList时指定初始容量或在添加大量元素前使用`ensureCapacity`方法预先扩大容量。 - **线程安全**:ArrayList的实现不是线程安全的,意味着在多线程环境下,如果不进行外部...
- **`ensureCapacity(int minCapacity)`**: 确保列表容量至少为`minCapacity`,如果当前容量小于`minCapacity`,则进行扩容。 - **`trimToSize()`**: 将列表的容量修剪为列表的实际大小,以减少内存占用。 4. **...
2. `ensureCapacity(int minCapacity)`:确保ArrayList的容量至少为minCapacity,如果不足则扩容。 3. `trimToSize()`:将ArrayList的容量调整为其实际元素的数量。 八、ArrayList与数组的转换 1. `toArray()`:将...
当需要添加元素到ArrayList时,通常使用add(E e)方法,这个方法首先会通过ensureCapacity方法确保有足够容量存放新元素,然后将元素添加到数组中。add(int index, E element)方法则是在指定位置插入元素,如果插入...
- **`ensureCapacity(int minCapacity)`**:确保容量至少为`minCapacity`,如果当前容量小于`minCapacity`,则调整容量。通常情况下,扩容操作会使容量增加50%。 - **`trimToSize()`**:将容量减小到列表的实际大小...
我们也可以通过`ensureCapacity()`方法提前设定容量,以避免不必要的扩容操作。 除了基本操作,ArrayList还提供了一些其他功能,如`indexOf()`(查找元素的索引)、`contains()`(判断是否包含特定元素)、`clear()...
`ensureCapacity()`方法用于确保ArrayList的容量至少为指定大小,当添加元素导致实际容量不足时,ArrayList会自动扩容。 ```java list.ensureCapacity(15); // 确保ArrayList至少有15个位置 ``` 10. **...
- **`ensureCapacity`**:此方法用于确保ArrayList的容量至少达到指定的最小值。如果当前容量小于所需的最小值,则会触发扩容操作。 - `public void ensureCapacity(int minCapacity)`:此方法首先计算最小扩展容量...
`ensureCapacity`方法用于确保ArrayList有足够的空间容纳新元素。在添加元素前调用此方法可以避免不必要的扩容操作,提高性能。比如,如果我们知道即将添加大量元素,可以预先调用`ensureCapacity`来设定合适的容量...
此外,ArrayList还提供了一些其他功能,如确保容量的方法`ensureCapacity(int minCapacity)`,以及检查是否包含特定元素的`contains(Object o)`方法。这些方法都在源码中有着详细的实现逻辑。 通过深入学习...
9. **ensureCapacity(int minCapacity)**: 确保ArrayList的容量至少为指定值,必要时进行扩容。 **四、ArrayList的特性** 1. **线程不安全**: ArrayList不是线程安全的,如果在多线程环境下操作ArrayList,需要同步...
`size()`方法返回ArrayList中的元素数量,而`ensureCapacity()`和`trimToSize()`分别用于确保最小容量和减小容量至实际元素数量。 9. ArrayList的性能 由于ArrayList基于数组,所以随机访问速度快,但插入和删除...