ArrayList 与数组和列表的比较

2023-12-02

我已经编程了相当多的时间,最近开始学习更多纯粹的计算机科学主题(用于工作面试)。

我知道数组和 LinkedList 数据结构之间的区别,但现在我已经开始使用 Java,我看到了这个 ArrayList,但我很难概念化它。

网络搜索只真正向我展示了如何使用它们以及何时使用它们(各自的好处),但没有任何东西可以回答我的问题:

什么是数组列表?我的假设是它是一个列表,维护对每个元素的内存引用,使其也能够像数组一样工作。

我也有一种感觉,因为 Java 是开放的,所以我应该能够查看类定义,但还没有弄清楚如何做到这一点。

Thanks!


我喜欢将其视为一种数据结构,让您享受两个世界:像数组一样快速访问索引,以及列表的无限增长。当然,总是需要权衡。

ArrayList实际上是数组的包装。每当数组大小结束时,就会创建一个两倍大小的新数组,并将原始数组中的所有数据复制到新数组中。

来自java文档:

List 接口的可调整大小的数组实现。实现所有 可选列表操作,并允许所有元素,包括 null。在 除了实现 List 接口之外,该类还提供 操作内部使用的数组大小的方法 存储列表。 (这个类大致相当于 Vector,除了 它是不同步的。)大小、isEmpty、get、set、迭代器和 listIterator 操作以恒定时间运行. The 添加操作运行 在摊余常数时间内,即添加n个元素需要O(n) 时间。所有其他操作都以线性时间运行(大致为 请讲)。与常数因子相比,常数因子较低 链表实现。

每个 ArrayList 实例都有一个容量。容量大小为 用于存储列表中元素的数组。它总是在 至少与列表大小一样大。当元素被添加到 ArrayList,它的容量会自动增长。成长细节 除了添加元素这一事实之外,没有指定策略 固定摊销时间成本。

应用程序可以增加 ArrayList 实例的容量 在使用ensureCapacity添加大量元素之前 手术。这可以减少增量重新分配的量。

这允许O(1)访问大多数操作就像访问数组一样。有时,您需要为这种性能付出代价,因为插入操作需要花费更长的时间。

这就是所谓的摊销的复杂。每次操作只需要O(1)除此之外,您需要将数组的大小加倍。那时你会付出O(n)但如果你对 n 次操作进行平均,所花费的平均时间仅为O(1)并不是O(n).

让我们举个例子:

我们有一个大小为 100 (n=100) 的数组。您进行 100 次插入操作(针对不同的索引),每个操作仅需要O(1),当然所有按索引获取的操作也需要O(1)(因为这是一个数组)。在第 101 次插入时,数组中不再有容量,因此 ArrayList 将创建一个新数组,大小为 200,将所有值复制到其中(O(n)操作),然后插入第 101 项。在将数组填充到 200 个项目之前,所有操作都需要O(1).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ArrayList 与数组和列表的比较 的相关文章

  • 根据重复值对 PHP 数组进行排序

    我有一个包含重复值的数组 我想对数组进行排序 以便重复次数最多的值出现在行中的第一个 这是我的数组的示例 array 1 2 3 2 1 2 2 我想对该数组进行排序 以便它根据重复项的数量对自身进行排序 如下所示 array 2 1 3
  • 使用 JAX-WS 的 WebLogic 中没有模式导入的单个 WSDL

    如何使用 JAX WS 配置由 WebLogic 10 3 6 生成的 Web 服务 以将对象架构包含在单个 WSDL 文件声明 而不是导入声明 中 示例代码 界面 import javax ejb Local Local public i
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • maven 无法下载 jacoco 0.7.10-SNAPSHOT jar

    我对此感到困惑 我的 pom xml 中有这个
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • awk 每个文件后换行

    使用此脚本 每个字段都会根据当前文件的最长单词打印出来 但需要每个文件都有一个换行符 如何才能实现这一目标 awk BEGIN ORS n FNR NR a i 0 if length 0 gt length max max 0 l len
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • java.lang.Object的hashCode具体使用的算法是什么

    中使用的算法是什么JVM实施java lang Object的隐含的hashCode 方法 OpenJDK or Oracle JDK答案中首选 它依赖于实现 并且在很大程度上 该算法是entirely取决于实施 只要它是一致的 但是 根据
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 链表算法查找总和为 10 的对

    您能否建议一种算法来查找链表中加起来为 10 的所有节点对 我想出了以下内容 算法 比较每个节点 从第二个节点开始 每个节点从头节点开始直到前一个节点 在当前比较的节点之前 并报告所有此类对 我认为这个算法应该可以工作 但是它肯定不是最有效
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • 如何连接以逗号分隔的命名范围的返回值

    我花了几个小时试图找出如何连接命名范围中的返回值 但结果是 运行时错误 32 类型不匹配 作为一个新手 我仍在与数组作斗争 所以也许我忽略了一些细节 谢谢你帮助我 示例 B1 苯 B2 柴油 B3 混合动力 gt E1 汽油 E2 柴油 E
  • jQuery 相当于 underscore.js 的 groupBy

    jQuery 中是否有一个内置函数可以执行相当于http underscorejs org groupBy http underscorejs org groupBy 有什么解决方法吗 Thanks 不 jQuery 不是为数据处理而设计的
  • 为什么我不能将 Collection 转换为 Collection>

    问题的关键是 为什么这会导致编译时错误 List
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐