Java ArrayList 如何动态扩容

发布时间:2025-01-21 12:54:29 作者:小樊
来源:亿速云 阅读:93

在 Java 中,ArrayList 是一个动态数组,它可以根据需要自动扩容。当 ArrayList 的大小达到其当前容量时,它会自动扩容以容纳更多的元素。ArrayList 的默认容量是 10,但可以根据需要设置初始容量。

要了解 ArrayList 如何动态扩容,我们需要了解其内部实现。ArrayList 的主要实现类是 java.util.ArrayList,它的内部使用一个 Object 类型的数组 elementData 来存储元素。当 ArrayList 的大小达到其当前容量时,它会创建一个新的数组,其大小为当前容量的两倍,然后将所有现有元素复制到新数组中。

以下是 ArrayList 动态扩容的步骤:

  1. 检查当前大小是否大于等于所需大小。如果是,则直接返回。
  2. 计算新的容量。新的容量通常是当前容量的两倍。
  3. 创建一个新的数组,其大小为新的容量。
  4. 将所有现有元素从旧数组复制到新数组中。
  5. 将数组引用指向新数组。

以下是 ArrayList 动态扩容的示例代码:

public void ensureExplicitCapacity(int minCapacity) {
    modCount++;

    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1); // newCapacity = oldCapacity * 2

    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;

    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);

    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
}

在这个示例中,ensureExplicitCapacity 方法用于确保 ArrayList 的容量至少为给定的最小容量。grow 方法用于实际扩展 ArrayList 的容量。它首先计算新的容量,然后创建一个新的数组,并将现有元素复制到新数组中。最后,将数组引用指向新数组。

推荐阅读:
  1. java中ArrayList和普通数组的区别
  2. Java集合ArrayList教程学习路线有哪些?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Java Lambda 表达式性能如何

下一篇:Lambda 表达式如何提升 Java 编程效率

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》