c语言编程笔录

首页 >   > 笔记大全

笔记大全

ArrayList集合初始化及扩容方法是什么

更新时间:2023-07-17
在Java中,集合类是实现动态数据存储的关键。ArrayList是其中最常用的一种,它可以自动扩容存储元素,允许我们存储任意类型的数据。在本文中,我们将深入了解ArrayList集合的初始化和扩容方法。

ArrayList详解

ArrayList是Java中的一个动态数组,它允许我们根据需求动态增加或删除数组元素。在ArrayList中,没有必要在创建数组时指定其大小。相反,它会自动扩展以容纳更多的元素。

通常情况下,我们可以使用以下方式初始化一个ArrayList集合:

    ArrayList<String> list = new ArrayList<>();

在初始化时,我们不需要指定集合的大小,因为ArrayList会根据需要自动扩展。

ArrayList的扩容机制

当我们向ArrayList中添加新元素时,ArrayList会首先检查其已分配的数组是否能容纳这个元素。如果不行,它就会触发一个扩容过程,其中会创建一个新的更大的数组,并将旧元素复制到新数组中。

默认情况下,当我们添加第11个元素时,ArrayList就会进行扩容。在这种情况下,ArrayList新的大小将是原来大小的1.5倍。例如:我们在一开始初始化时没有指定容量,系统为我们默认创建的容量是10,当我们添加第11个元素时,内部数据结构就会自动进行扩容,容量变为15。如果我们在初始化时指定了初始化容量,system会为我们创建一个初始化容量大小的ArrayList,当添加第11个元素时,就会根据原有大小和增量的计算规则重新计算容量大小。

    ArrayList<String> list = new ArrayList<>(20);

这个样例表示初始化大小为20的ArrayList集合。

ArrayList中的确切扩容规则

在Java 7中,ArrayList的扩容过程是通过调用数组的copyOf方法来完成的。在Java 8中,ArrayList的扩容过程与Java 7中不同。Java 8中的扩容机制基于以下三种方法:

  • 在添加第一个元素时,将容量设置为10
  • 在添加任意元素时,计算(当前容量 * 3 / 2) + 1,并将结果作为新容量
  • 在添加元素之后,如果发现容量不足以存储更多元素,则容量将增加到最小等于当前容量 + 元素的数量的大小

总结

在本文中,我们详细介绍了ArrayList集合类型的初始化和扩容方法。通过在初始化时不指定大小的方式启用ArrayList可以方便地自动扩展,防止过早的饿过度分配导致浪费。正确了解ArrayList扩容规则能够更好地优化代码,提高代码执行效率,避免出现内存溢出的问题。