ArrayList在Java中的内部工作原理

ArrayList在Java中的内部工作原理

ArrayList是Java Collection Framework中实现List接口的类。它是一个线性结构,顺序存储和访问每个元素,这是因为它内部使用动态数组来存储其元素。与数组一样,它也允许存储重复元素。这里的动态数组是指能够根据需要增长和收缩的数组。在本文中,我们将探讨 ArrayList 的内部工作原理,以展示它如何存储其元素并在操作期间调整自身大小。

ArrayList 在 Java 内部如何工作?

我们大多数人都知道标准数组是固定长度的。一旦数组被声明并初始化,它们就不能增长或收缩,这意味着我们在指定其大小后不能添加更多元素。但是,在一些极端情况下,开发人员可能直到运行时才知道所需的数组大小。在这种情况下,ArrayList 是数组的更好替代方案,它可以动态增加或减少元素的数量。

ArrayList 的构造函数

要在我们的程序中使用ArrayList,我们首先需要创建ArrayList类的实例。为此,Java 提供了下面提到的三种不同的构造函数:

  • ArrayList():它将创建一个空的ArrayList。

  • ArrayList(intcapacityInitial):在此构造函数中,我们可以传递 ArrayList 可容纳的元素数量的初始容量。一旦元素数量达到初始容量,该容量就会自动增加。

  • ArrayList(Collection collectionName):我们还可以使用此构造函数从另一个集合创建 ArrayList。

为什么ArrayList是动态的?

当我们使用内置方法“add()”向 ArrayList 添加元素时,它首先检查数组中是否有足够的空间来存储新元素。如果存在,它将新元素分配给数组中的下一个可用索引。如果没有足够的空间容纳新元素,它会创建一个容量更大的新数组,通常是当前容量的 1.5 倍,然后将旧数组中的所有现有元素复制到新数组,并将新元素分配给下一个元素新创建的数组中的可用索引。

当我们使用内置方法“remove()”从 ArrayList 中删除一个元素时,它会将删除的元素之后的所有元素向左移动一个索引。但是,它不会立即收缩数组,但如果大小与容量相比太小,它可能会在稍后收缩。

让我们讨论几个例子,以便更好地理解上面讨论的要点。

示例 1

以下示例说明如何在 Java 中创建和打印 ArrayList 的元素。

import java.util.*; public class Example1 { public static void main(String[] args) { // Creating arraylist ArrayList araylist = new ArrayList(); // Adding elements in arraylist araylist.add(8); araylist.add(5); araylist.add(2); araylist.add(9); araylist.add(2); araylist.add(4); araylist.add(9); araylist.add(7); System.out.println("List of elements: " + araylist); } } 登录后复制