Java ArrayList.ensureCapacity()方法详解

培训教学 潘老师 7个月前 (10-09) 154 ℃ (0) 扫码查看

ArrayList.ensureCapacity() 方法会在必要时增加给定 ArrayList 实例的容量,以确保它至少可以容纳由方法参数 minCapacity 指定的数量的项。

我们需要在 ArrayList 中存在大量 add() 操作的情况下使用 ensureCapacity() 方法。在这种情况下,ArrayList 会频繁调整大小,而列表的调整大小是一个开销较大的操作。

1.语法

如果 minCapacity 的值小于 10,即 ArrayList 的默认容量,那么所确保的容量将为 10。

public void ensureCapacity(int minCapacity)

2.为什么 ArrayList 的调整大小开销较大?

Java ArrayList 内部使用一个名为 elementData 的支持数组对象,用于存储列表项。所有 ArrayList 方法都在 elementData 上操作,并处理其中存储的项。

ArrayList.javapublic class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    private static final int DEFAULT_CAPACITY = 10;
    transient Object[] elementData;
    //more code...
}

这就是为什么 ArrayList 是一个有序集合并提供基于索引的访问的原因。

请注意,数组是固定大小的集合,而 ArrayList 在运行时增长,一旦支持数组 elementData 满了并且需要添加更多元素到列表时就会增长。

增加 elementData 数组的大小称为调整大小。这个调整大小分为两个步骤:

  • 创建一个比之前数组更大的新支持数组。
  • 将所有元素从旧数组复制到新数组。

因此,基本上,在使用 add() 方法向 ArrayList 添加任何新项之前,ArrayList 会使用 ensureCapacity() 方法检查支持数组中是否还有空间。

如果支持数组中有空间可用,那么新元素将添加到数组中;否则,首先会创建一个新的支持数组。

3.ArrayList.ensureCapacity() 示例

Java 程序使用 ensureCapacity() 方法来在初始化后增加 ArrayList 的大小。在给定的示例中,我们首先创建了一个大小为 2 的 ArrayList。假设我们想要向其添加 20 个额外的元素,在添加过程中将会发生几次调整大小。

第一次调整大小将列表大小增加到 10。然后后续的 add() 操作将导致数组多次调整大小。

为了避免多次调整大小,我们可以使用带有大小为 25 的 ensureCapacity() 方法。这将为数组中存储所有额外的 20 个项提供足够的空间。它可以提高整个程序的性能。

public class ArrayListExample
{
    public static void main(String[] args)
    {
        ArrayList<> list = new ArrayList<>(2);
        list.add("A");
        list.add("B");
        System.out.println(list);
        list.ensureCapacity(25);
        list.add("C");
        list.add("D");
        list.add("E");
        System.out.println(list);
    }
}

程序输出:

[A, B]
[A, B, C, D, E]

以上就是Java ArrayList.ensureCapacity()方法详解的全部内容。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9381.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】