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);
}
}
登录后复制
输出
List of elements: [8, 5, 2, 9, 2, 4, 9, 7]
登录后复制
示例 2
在下面的示例中,我们将创建一个具有初始容量的ArrayList,并尝试添加超过指定容量的元素,以显示ArrayList可以动态增长。
import java.util.*;
public class Example2 {
public static void main(String[] args) {
// Creating arraylist with initial capacity of 5
ArrayList araylist = new ArrayList(5);
// Adding elements in arraylist
araylist.add(80); // 1
araylist.add(15); // 2
araylist.add(23); // 3
araylist.add(9); // 4
araylist.add(12); // 5
// adding more elements
araylist.add(14);
araylist.add(91);
araylist.add(74);
System.out.println("List of elements: " + araylist);
}
}
登录后复制
输出
List of elements: [80, 15, 23, 9, 12, 14, 91, 74]
登录后复制
示例 3
在此示例中,我们将从 HashSet 创建一个 ArrayList,以演示可以将一个集合的元素添加到 ArrayList。在内部,它首先检查传递的集合的大小,然后使用“Arrays.copyOf()”方法将元素存储在给定的 ArrayList 中。
import java.util.*;
public class Example3 {
public static void main(String[] args) {
// Creating a Set
HashSet setH = new HashSet();
// Adding elements in the Set
setH.add(80);
setH.add(15);
setH.add(23);
setH.add(9);
setH.add(12);
setH.add(14); setH.add(91);
setH.add(74);
// Passing the Set to the ArrayList
ArrayList araylist = new ArrayList(setH);
// printing the result
System.out.println("List of elements: " + araylist);
}
}
登录后复制
输出
List of elements: [80, 23, 9, 74, 91, 12, 14, 15]
登录后复制
结论
我们通过定义 ArrayList 开始本文,在下一节中,我们讨论了它的内部工作原理。 ArrayList 是一个可调整大小的数组,其默认容量为 10,当我们向其中添加更多元素时,可以增加该容量。我们还可以在创建 ArrayList 时在其构造函数中指定初始容量。
以上就是ArrayList在Java中的内部工作原理的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!