Java 中 Array 和 ArrayList 的区别2025 年 5 月 29 日 | 阅读 6 分钟 在 Java 中,数组(array)和 ArrayList 是众所周知的数据结构。数组是 Java 提供的一项基本功能,而 ArrayList 是 Java 集合框架中的一个类。它属于 java.util 包。 Java 数组数组 是动态创建的对象。它作为一个容器,存储固定数量的相同类型的值。它具有连续的内存位置。一旦创建了数组,我们就无法更改其大小。我们可以使用以下语句创建数组: 上述语句创建一个指定大小的数组。当我们尝试添加超过其大小的元素时,它会抛出 ArrayIndexOutOfBoundsException。例如: 阅读更多 Java 数组 数组示例在下面的示例中,我们简单地创建了一个长度为 4 的数组。 输出 Java ArrayList 类在 Java 中,ArrayList 是 Collections 框架中的一个类。它实现了 List<E>、Collection<E>、Iterable<E>、Cloneable、Serializable 和 RandomAccess 接口。它扩展了 AbstractList<E> 类。 我们可以使用以下语句创建 ArrayList 实例: Java 中的 ArrayList 内部由数组支持。ArrayList 中的扩容操作会降低性能,因为它涉及创建一个新数组并将内容从旧数组复制到新数组。它会调用本地实现的 System.arraycopy(sec, srcPos, dest, destPos, length) 方法。 我们不能在 ArrayList 中存储基本类型。因此,它只存储对象。它会自动将基本类型转换为对象。例如,我们创建了一个 ArrayList 对象, JVM 通过自动装箱将其转换为 Integer 对象。 阅读更多 Java ArrayList ArrayList 示例在下面的示例中,我们创建了一个 ArrayList 实例,并正在对 ArrayList 进行迭代。 输出 相似之处- Array 和 ArrayList 都用于存储元素。
- Array 和 ArrayList 都可以存储 null 值。
- 它们可以有重复的值。
- 它们通常会保留元素的顺序。
Array 与 ArrayList下表描述了数组和 ArrayList 之间的主要区别 基础 | Array | ArrayList |
---|
定义 | 数组 是动态创建的对象。它作为一个容器,存储固定数量的相同类型的值。它具有连续的内存位置。 | ArrayList 是 Java Collections 框架中的一个类。它包含 Vector、HashTable 和 HashMap 等流行类。 | 静态/动态 | 数组的大小是静态的。 | ArrayList 的大小是动态的。 | 可调整大小 | 数组是固定长度的数据结构。 | ArrayList 是可变长度的数据结构。它可以在需要时自行调整大小。 | 初始化 | 在直接或间接初始化数组时,必须提供数组的大小。 | 我们可以在不指定大小的情况下创建 ArrayList 实例。Java 会创建一个默认大小的 ArrayList。 | 性能 | 与 ArrayList 相比,由于其固定大小,它的性能更快。 | Java 中的 ArrayList 内部由数组支持。ArrayList 中的扩容操作会降低性能。 | 原始类型/泛型 | 数组可以存储对象和原始类型。 | 我们不能在 ArrayList 中存储原始类型。它会自动将原始类型转换为对象。 | 迭代值 | 我们使用 for 循环或 foreach 循环来迭代数组。 | 我们使用迭代器来迭代 ArrayList。 | 类型安全 | 我们不能将泛型与数组一起使用,因为它不是可转换的数组类型。 | ArrayList 允许我们只存储泛型/类型,因此它是类型安全的。 | 长度 | 数组提供一个 length 变量,表示数组的长度。 | ArrayList 提供 size() 方法来确定 ArrayList 的大小。 | 添加元素 | 我们可以使用赋值运算符将元素添加到数组中。 | Java 提供 add() 方法来将元素添加到 ArrayList 中。 | 单维/多维 | 数组可以是多维的。 | ArrayList 始终是单维的。 |
要记住的重要事项内存结构 - 数组使用连续的内存位置。
- ArrayList 内部使用动态数组,并处理大小调整和元素移动。
大小处理 - 数组的大小是固定的;创建后无法调整大小。
- ArrayList 是动态的,根据需要自动增长/收缩。
数据类型 - 数组可以存储原始类型(int、char、double 等)和对象。
- ArrayList 只存储对象;原始类型会转换为对象(自动装箱)。
性能 - 由于开销较少(无大小调整,无装箱/拆箱),数组通常更快。
- ArrayList 在大小调整和对象装箱时可能会有性能损失。
语法和特性 - 数组使用 [ ] 和 length 属性。
- ArrayList 使用泛型 <Type>,并具有 add()、remove()、size() 等方法。
多维能力 - 数组支持多维结构(int[][] 矩阵)。
- ArrayList 是单维的,但可以存储其他列表(List<List<T>> 以实现二维行为)。
类型安全 - 数组与泛型不具有类型安全性。
- ArrayList 支持泛型,提供编译时类型检查。
迭代 - 数组:使用 for、for-each 或 Streams 进行迭代。
- ArrayList:使用 for-each、Iterator、ListIterator 或 Streams 进行迭代。
实用工具 - 数组通过 java.util.Arrays 中的实用方法进行操作。
- ArrayList 带有内置的列表操作方法。
结论数组和 ArrayList 都是 Java 编程不可或缺的组成部分,各有其优缺点 - 当需要固定大小、高性能的结构或处理原始类型时,请使用数组。
- 当需要可调整大小的集合、丰富的 API 支持、类型安全和基于对象的操作时,请使用 ArrayList。
选择它们取决于具体的用例、性能需求和存储的数据类型。掌握两者可确保开发 Java 应用程序的灵活性和效率。 Array 和 ArrayList 选择题1) 以下哪项是 Array 和 ArrayList 之间的相似之处? - Array 和 ArrayList 都用于存储元素。
- Array 和 ArrayList 都可以存储 null 值。
- 它们可以有重复的值。
- 以上全部
答案:4) 解释: Array 和 ArrayList 都可以用于存储重复值和 null 值。它也可以用于存储元素。
2) 选择正确的陈述。 - Array 和 ArrayList 都可以用于存储原始类型。
- ArrayList 可以用于存储原始类型。
- 数组可以用于存储原始类型。
- 以上全部
3) 选择不正确的陈述。 - 我们不能将泛型与数组一起使用。
- ArrayList 提供一个 length 变量,表示 ArrayList 的长度。
- 数组的大小是静态的。
- ArrayList 的大小是动态的。
答案:2) 解释: 是数组提供一个 length 变量,表示数组的长度。
4) 哪种数据结构使用赋值运算符 (=) 来添加元素? - Array
- ArrayList
- 两者
- 无
答案:1) 解释: 数组使用赋值运算符 (=) 来添加元素。
5) 自动装箱用于 __________。 - Array
- ArrayList
- 两者
- 无
答案:2) 解释: 我们不能在 ArrayList 中存储原始类型。因此,它只存储对象。它会自动将原始类型转换为对象。 |