ArrayList集合初始化及扩容方法是什么
更新时间:2023-07-17ArrayList详解
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扩容规则能够更好地优化代码,提高代码执行效率,避免出现内存溢出的问题。