行业资讯 2025年08月6日
0 收藏 0 点赞 318 浏览 1540 个字
摘要 :

文章目录 1.语法 2.为什么 ArrayList 的调整大小开销较大? 3.ArrayList.ensureCapacity() 示例 ArrayList.ensureCapacity() 方法会在必要时增加给定 ArrayList 实例的……




  • 1.语法
  • 2.为什么 ArrayList 的调整大小开销较大?
  • 3.ArrayList.ensureCapacity() 示例

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.zuozi.net/9325.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号