ArrayList扩容机制详解(看这篇就够了)

ArrayList扩容机制详解(看这篇就够了)-mikechen

在 Java 中ArrayList 是一个动态数组,ArrayList扩容机制是在容量不足时,自动增加容量并将元素复制到新的数组中。

ArrayList 的扩容机制如下,主要就是三个步骤:

第一步:创建一个新数组

当 ArrayList 中元素数量超过其容量时,会创建一个新的数组来替代原来的数组。

 

第二步:默认扩容为1.5倍

如果数组需要的容量大于数组容量的时候会,调用grow方法给数组扩容。

如下所示:

// 初始容量为10
javaCopy codeArrayList<Integer> arrayList = new ArrayList<>(10); 

// 当添加第11个元素时,容量不足,将自动扩容为15
arrayList.add(11);

ArrayList初始化容量为10,当第11个元素加入,数组需要的容量大于数组容量了,这个时候就会调用grow方法给数组扩容。

如下所示:

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

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

grow方法将数组扩容1.5倍,如果扩容1.5倍以后还比最小值小的话,将minCapacity复制给新的容量。

 

第三步:把新元素添加到扩容以后的数组中

最后使用Arrays工具类的copyOf方法复制数组,这样ArrayList 就完成了扩容。

如下所示:

elementData = Arrays.copyOf(elementData, newCapacity);

如果在添加元素时,ArrayList 的容量不够,又需要进行扩容操作,则重复上述步骤。

需要注意的是,ArrayList 的扩容操作可能会导致性能问题,因为每次扩容都需要创建新的数组并复制元素。

因此,可以通过预设合适的容量来避免不必要的扩容操作,从而提高程序的性能。

以上就是ArrayList扩容机制的详解,更多关于ArrayList的内容,请查看:ArrayList全面详解(看这篇就够了)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法