ArrayList Implementation in Java2025 年 3 月 30 日 | 阅读 7 分钟 ArrayList 是 Java 集合框架中的一个类。它使用动态数组来存储对象。它与 Array 非常相似,但没有大小限制。我们可以随时添加或删除元素。我们可以使用 ArrayList 存储重复的元素;它在内部管理插入的顺序。 ArrayList 类比传统的 Array 更灵活。它实现了 List 接口,可以使用 List 接口的所有方法。它位于 java.util 包中。理解其实现对于任何希望在其代码中获得精通和优雅的 Java 开发人员来说都是基础。在本节中,我们将讨论 Java 中的 ArrayList 实现,以及它的特性、优点和最佳实践。 ArrayList 类继承了 AbstractList 类并实现了 List 接口。它的元素可以被随机访问。它不能用于原始类型,如 int、char 等;对于这些数据类型,我们需要一个包装类。 Array 和 ArrayList 之间的区别在于 ArrayList 提供了一个动态数组,可以在需要时进行扩展。在 Array 中,我们必须在初始化时指定 Array 的大小,但对于 ArrayList 则不必。默认情况下,它的大小为 10。 ArrayList 类可以声明如下 ArrayList 可以定义如下 请看以下示例 文件名:ArrayListLExample.java 输出 List objects are: [Sam, Sandy, Joe, Arya, Nik] After Removing Nik, List Objects are: [Sam, Sandy, Joe, Arya] 从上面的示例可以看出,我们如何添加或删除 List 的对象。 让我们了解它是如何工作的 ![]() ArrayList 在内部如何工作?当我们使用以下语法初始化 ArrayList 时 它会创建一个具有默认容量(10)的 Array。它调用 ArrayList 类的默认构造函数。它使用一个空数组实例来创建新对象,并且以下代码由 Java 编译器执行 在 Java 7 或更早版本中 在 Java 8 或更高版本中 在上面的代码片段中,我们可以看到一个内部创建的空 ArrayList,其默认容量为 10。当我们向其中添加第一个元素时,它将被扩展到 DEFAULT_CAPACITY。 ArrayList 使用 Object [] 数组来添加、删除和遍历元素。 对于 Java 8 之前的版本,它指定对象如下 在上面的代码片段中,我们可以看到数组大小将等于指定的 Array。 我们也可以定义具有特定容量的 List。当我们提供初始容量时,ArrayList 构造函数会在内部调用以在内部指定 Array。例如,如果我们定义一个容量为 20 的 ArrayList,我们必须如下定义 ArrayList 然后以下代码将由 Java 编译器执行 在 Java 7 或更早版本中 从上面的代码可以看出,数组大小将等于指定的 Array。 在 Java 8 或更高版本中 从上面的代码可以看出,数组大小将等于指定的 Array。 我们也可以通过执行以下代码行来创建 ArrayList 的对象 上面的代码将创建一个非空列表,其中包含 LinkedList 的对象。 ArrayList 的关键特性
ArrayList 是如何动态增长的?当我们向 ArrayList 添加新对象时,它会检查 ArrayList 的初始大小,看是否有空间。如果新对象有足够的空间,它将简单地使用 add() 方法添加。如果空间不足以添加新对象,它将以该容量动态增加 Array 的大小。 考虑 add() 方法的以下实现(Java 7 及更高版本) 在上面的代码中,上面提到的代码
ArrayList 实现细节Java 中的 ArrayList 在内部由对象数组 (Object[]) 支持以存储元素。让我们探讨一些关键的实现细节 容量和大小: ArrayList 维护两个主要参数:容量和大小。容量表示内部数组的当前大小,而大小表示 ArrayList 中存在的元素数量。 调整大小策略: 当添加的元素超出当前容量时,ArrayList 会自动增加其容量以容纳新元素。它通常会将其内部数组的大小加倍,以在追加操作中保持摊销的恒定时间复杂度。 性能考虑: 虽然 ArrayList 在随机访问和在列表末尾插入/删除方面效率很高,但由于数组复制,从中间插入或删除元素会产生更高的计算开销。 遍历 ArrayList: ArrayList 提供了多种遍历其元素的方法,包括传统的 for 循环、增强 for 循环以及通过 iterator() 方法获取的迭代器。 ArrayList 的性能在 ArrayList 中,add 操作需要 O(n) 时间;其他操作以线性时间运行。 size、isEmpty、get、set、iterator 和 listIterator 任务以 O(1) 的恒定时间运行。 总结
其动态调整大小、高效的随机访问和对泛型的支持使其成为管理元素集合的通用选择。通过理解其内部机制、利用最佳实践并了解性能注意事项,开发人员可以充分发挥 ArrayList 的潜力,编写出高效且健壮的 Java 代码。 |
SortedSet 的 addAll() 方法通过添加给定集合中的每个元素来保留集合的唯一性和顺序。addAll(Collection C) 函数将指定集合中的所有元素追加到当前集合中。元素没有特定的集合顺序……
阅读 3 分钟
native 关键字用于指示一个方法是在另一种语言(通常是 C 或 C++)中实现的。这些方法通常用于与硬件交互、操作系统级功能或提高特定任务的性能。请注意,native 关键字可以应用于……
阅读 3 分钟
在编程竞赛中,不仅需要解决问题的能力和技巧,还需要高效解决问题的能力。在 Java 中,以下是一些可以帮助您在时间限制内解决问题时表现更好的技巧和窍门。 1. 检查...
阅读 28 分钟
在本节中,我们将讨论如何创建用于购物账单的 Java 程序。要生成购物账单,我们需要产品 ID、名称、数量、单价和产品的总价,以及总计金额。除了产品详细信息外,我们还可以添加……
阅读 12 分钟
Java 程序将数组重新排列为交替的正负数,额外空间复杂度为 O(1) 问题陈述给定一个整数数组,一个好的排列是正数和负数交替放置。如果多余的数字是正数或负数,则...
5 分钟阅读
在 Java 中,JSON 在存储数据方面发挥着重要作用。ArrayList 是一种特殊的 Array,其大小是动态的。它还可以随时用于存储或删除数据。ArrayList 使用 List 的所有方法,并维护插入顺序,因为它实现了...
阅读 3 分钟
? 序列化是 Java 中的一项重要功能,它允许将对象转换为字节流,然后可以存储或传输。在面向对象编程中,有时可能需要使特定字段可序列化以确保其状态...
阅读 3 分钟
在 Web 开发领域,Java 因其多功能性、健壮性和平台独立性而仍然是一个强大的工具。在构建 Web 应用程序时,Java 开发人员通常使用 Web 方法来处理 HTTP 请求和响应。这些 Web 方法是 RESTful Web 服务的支柱,并扮演着……
阅读 4 分钟
向量是既有大小又有方向的数学实体。在计算机编程中,向量通常用于表示同时具有大小和方向的量,例如速度、力、位移。Java 作为一种流行的面向对象编程语言,通过……为向量运算提供了内置支持。
阅读 8 分钟
在 Web 世界中,会话是指任何两个系统相互交互的时间长度。这两个系统可以彼此建立点对点或客户端-服务器关系。然而,问题在于,在 HTTP 协议中,状态的...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India