Java ArrayList 和 LinkedList - 在末尾添加元素实现细节

2024-04-17

我对为什么 arraylist 比链表更快的理解是,使用 arraylist 基本上只需要一个操作 - 更新末尾数组元素的引用,而使用链表你必须做更多的事情,例如创建一个新节点,更新 2 个引用,遍历链表并更新最后一个节点以指向新节点等。

但是我不确定java如何实现这些。 arraylist 如何知道“最后一个”元素在哪里,它是否存储最后一个元素的值,或者它是否遍历数组并在最后一个元素之后添加一个新元素?

而链表,它们是存储对列表中最后一个节点的引用,还是遍历整个列表以到达末尾?


看源码:

数组列表 http://docjar.com/html/api/java/util/ArrayList.java.html:

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}      

链表 http://docjar.com/html/api/java/util/LinkedList.java.html:

public boolean add(E e) {
    linkLast(e);
    return true;
}

void linkLast(E e) {
    final Node<E> l = last;
    final Node<E> newNode = new Node<>(l, e, null);
    last = newNode;
    if (l == null)
        first = newNode;
    else
        l.next = newNode;
    size++;
    modCount++;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java ArrayList 和 LinkedList - 在末尾添加元素实现细节 的相关文章

  • Jquery:获取数字数组中的最大值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 使用jquery 如何获得数组或数字
  • 使用两个不同的泛型参数调用泛型函数仍然可以编译

    下面的代码怎么可能编译通过 据我所知 count 函数是用两种不同的类型调用的 但编译器并没有抱怨并愉快地编译了这段代码 public class Test public static
  • 使用 PropertiesLauncher 启动的 Spring-boot(特定于配置文件)应用程序中出现覆盖应用程序属性的问题

    我在尝试使用文件系统上的覆盖文件中声明的另一个值来覆盖类路径上特定于配置文件的应用程序属性文件中声明的属性时遇到困难 我有一个自动配置的 Spring boot 应用程序 即 使用 EnableAutoconfiguration 有多个配置
  • 桌面应用程序的对象持久化策略

    我正在开发一个基于 Java 的桌面应用程序 我需要保留一些从应用程序对象模型生成的数据 最好保存到文件中 还需要保护持久文件 以便其他人无法从数据中获取对象模型详细信息 执行这些操作的最佳策略是什么 我的印象是这些要求对于桌面应用程序来说
  • Spring Autowire 在同一类中创建 Bean 会导致:请求的 bean 当前正在创建错误*

    我知道该错误是不言自明的 但是当我将其余模板的设置从构造函数删除为 Autowired Qualifier myRestTemplate private RestTemplate restTemplate 时 它 起作用了 只是想知道如果同
  • Joda-time:今年 ISO 第一周的第一天

    我想找出今年 ISO 第 1 周中星期一的日期 对于 2009 年 这将是 2008 年 12 月 29 日星期一 我确定乔达时间 http www joda org joda time cal iso html可以处理这个问题 但我就是无
  • Java 递增/递减运算符 - 它们的行为方式是什么,功能是什么?

    开始学习Java已经三天了 我有这个程序 但我不明白其中的代码main方法与 and 运营商 我什至不知道该怎么称呼他们 这些操作员的名字 谁能给我解释一下这是怎么回事 class Example public static void ma
  • 在 SAS 中生成数组的所有唯一排列

    在 SAS 中 如果我有一个如下所示的字符串或数组 array x 4 1 A B C D 我需要生成元素的所有 独特 排列 如下所示 ABCD ABC BCD ACD ABD AB AC AD BC BD CD A B C D SAS中有
  • 使用反射检查java中的字段是否为final

    我正在编写一个类 它在某些时候必须拥有它的所有内容Fields 从该类的另一个项目分配 我通过反思做到了 for Field f pg getClass getDeclaredFields f set this f get pg 问题是 这
  • JAVA - 路径问题(在 Eclipse 中有效,在 cmd 中无效)

    为什么下面的启动在 Eclipse 中有效 private static MaxentTagger maxentTagger new MaxentTagger c DP lemma models english left3words dis
  • 如何从 ScheduledExecutorService 中删除任务?

    我有一个ScheduledExecutorService定期执行一些不同的任务scheduleAtFixedRate Runnable INIT DELAY ACTION DELAY TimeUnit SECONDS 我也有不一样的Runn
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • 在Android应用程序中导入Java项目?

    即使 Java 项目中的某些类在普通 Android 项目中无法识别 我是否可以在 Android 项目中使用 Java 项目 例如javax xml包 我认为有两种可能性 使用该 java 项目创建一个 jar 并将其导入到 androi
  • 在eclipse中的另一个项目中使用一个项目的包

    如何在定义包的主项目之外使用包的类 例如 假设 people 包中有一个属于 ProjectOne 的 Employee 类 假设另一个具有相同功能的项目 ProjectTwo 需要 Employee 我应该在那里做什么 在 Package
  • 从一个 numpy 数组中删除另一个 numpy 数组中的元素的有效方法

    从一个 numpy 数组中删除另一个数组中的元素的最佳方法是什么 本质上我是在追求np delete 其中数组的顺序并不重要 import numpy as np a np array 2 1 3 print a b np array 4
  • 如何通过 Selenium 通过 XPath 访问 WebElement?

    我需要访问该网站上搜索结果的链接 并将它们放入WebElement 但我无法按班级或任何其他方式找到它们 使用时xpath MyWebDriver findElement By xpath div class inner results f
  • AngularJS 和 Webpack 集成

    我正在寻找一些使用帮助webpack http webpack github io docs 对于大型 AngularJS 应用程序 我们使用基于功能的文件夹结构 每个功能 页面都有一个模块 并且它们有控制器 指令 我已经成功配置了 web
  • 使用外部属性文件执行 jar

    我有一个带有主类的 jar 可以像这样执行 java jar test jar 罐子里有类似的东西 public static void main String args throws IOException InputStream is
  • TextField“更改”事件仅在模糊时触发

    通常 Change 事件将在 TextField 失去焦点 模糊 后触发 但我需要它在字段值发生变化时立即触发 而不需要失去对该字段的关注 KeyListener 不会删除它 因为该值可能来自条形码扫描仪等 有什么办法可以做到这一点吗 提前
  • Java初学者网络开发工具包/环境

    我的任务是使用 java 和 mysql 开发一个交互式网站 使用 servlet 检索和处理数据 使用小程序对客户端数据进行特殊处理 并处理客户端对不同数据视图的请求 您会推荐什么作为使用 java 进行 Web 开发的合适的通用工具包

随机推荐

  • Flutter:webview_flutter 更新同一 webview 小部件中的 url

    嘿 我正在尝试创建一个屏幕 显示带有底部应用栏的网络视图 因此 您加载网络视图 当点击底部应用栏中的某个项目时 其他网站应该加载到同一个网络视图中 除了我最初解析的网站之外 我不知道如何打开另一个网站 我尝试使用 setState 更新网址
  • 处理kendo调度程序中的销毁事件

    我正在使用剑道调度程序 调度程序网格中添加了事件 当鼠标悬停在每个事件上时 右上角会出现一个小 x 即该事件的销毁事件 单击该事件时会显示一条警告消息 您确定要删除此事件吗 如果单击 是 它将继续并删除该事件 这是我的要求 正如您在上面看到
  • WSO2 身份服务器 - Oauth 2.0 - Java 签核示例

    我为 Oauth2 身份验证流程编写了一个基于 Java 的签核例程 令牌撤销 请参阅下面的代码实现 遵循手册中描述的 cURL 协议说明 here https docs wso2 com display IS500 OAuth Token
  • 下划线模板 - 更改标记标记

    开箱即用的下划线模板使用标记对于原始的 和用于 HTML 转义内容 我知道您可以使用以下方法更改标记 templateSettings interpolate g 但这与原始内容和转义内容有何关系 在我看来 你最终只能得到一种类型的标记 或
  • ScalaCheck 生成 BST

    我正在尝试使用 ScalaCheck 创建 BST 的 Gen 但是当我调用 sample 方法时 它给出了 java lang NullPointerException 我哪里错了 sealed trait Tree case class
  • 如何从

    我有一个严重的问题 我想从标签中提取内容 例如 div class main content div class sub content Sub content here div Main content here div 我期望的输出是
  • 机器人按键在 Linux 中不工作

    我多次使用 Robot 类 但在 Windows 中没有遇到任何问题 但这次我使用的是 Fedora 如果我尝试一下 keyPress KeyEvent VK WINDOWS 它不工作 如何在linux Fedora 中模拟按Windows
  • Ninject 通过城堡动态代理拦截具有非空构造函数的代理类

    我当前的大部分实现都基于此处提供的信息 Ninject 拦截任何具有特定属性的方法吗 https stackoverflow com questions 6386461 ninject intercept any method with c
  • x11 - 导入错误:没有名为“kivy.core.window.window_x11”的模块

    当我尝试在我的 kali linux 操作系统中使用 python 3 5 运行任何 kivy 程序时 然后我收到以下错误 程序 from kivy app import App from kivy lang import Builder
  • 为什么 Gradle 或 Maven 没有依赖版本锁定文件?

    最近 在阅读 NPM Yarn Paket Cargo 等包管理器时 我了解到依赖版本锁定文件的概念 我的理解是 它是一个列出所有直接和传递依赖项及其确切依赖项的文件 版本号 因此保证后续构建使用一组等效的依赖项 这似乎是一个理想的功能 因
  • 无需越狱 iPhone 即可访问 /var/mobile/Containers/Data/Application 中的文件

    程序在 iPhone 上的目录 var mobile Containers Data Application 中记录一些消息 有什么方法可以在不越狱 iPhone 的情况下访问此目录 如果没有 iPhone 上是否有任何目录可以让我在不越狱
  • MySQL 调试工具查询速度慢? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有哪些免费工具可以用来查找MySQL的慢查询 除了记录慢速查询之外 需要详细分析慢查询 谢谢 凯瑟尔 U
  • 多处理管理器出现 EOFError

    我有很多客户端通过 0MQ 连接到服务器 我有一个管理器队列 用于工作人员池与每台客户端计算机上的主进程进行通信 在一台拥有 250 个工作进程的客户端计算机上 我几乎立即看到一堆 EOFError 它们发生在执行 put 时 我预计大量的
  • 有没有办法在 Spark 中随机排列集合

    我需要用 2 2 10 9 行打乱文本文件 有没有办法将它加载到 Spark 中 然后并行地洗牌每个分区 对我来说 在分区范围内洗牌就足够了 然后将其溢出回文件 要仅在分区内进行洗牌 您可以执行以下操作 rdd mapPartitions
  • 这个校验和算法可以改进吗?

    我们有一个非常旧的 不受支持的程序 可以跨 SMB 共享复制文件 它有一个校验和算法来确定文件内容在复制之前是否已更改 该算法似乎很容易被愚弄 我们刚刚找到了一个示例 其中两个文件完全相同 除了单个 1 更改为 2 之外 返回相同的校验和
  • 无法使用 mailR 包通过 Outlook.com 发送电子邮件

    我想用 mailR 用于发送带有身份验证的电子邮件通知的包 这个包的支持者是 rJava 并使用 Java 设施 我注册了 Outlook com 帐户 这是代码 library mailR email lt send mail from
  • 读取 3 个字节作为整数

    如何读取 3 个字节的整数 struct module 是否提供类似的东西 我可以读取 3 个字节并添加一个额外的 x00 然后将其解释为 4 字节整数 但这似乎没有必要 struct 模块没有 3 字节整数的选项 所以我认为附加 x00
  • 从 oauth 身份验证获取电子邮件 (Microsoft)

    如何从微软帐户获取电子邮件 我正在执行以下操作 public ActionResult ExternalLoginCallback string returnUrl AuthenticationResult result OAuthWebS
  • 在 R 中使用 geom_rect 进行时间序列着色

    我正在尝试对时间序列图的某个部分进行着色 有点像经济衰退阴影 类似于底部的图表 这篇关于 Excel 中的经济衰退阴影的文章 https research stlouisfed org tips 200511 recession bars
  • Java ArrayList 和 LinkedList - 在末尾添加元素实现细节

    我对为什么 arraylist 比链表更快的理解是 使用 arraylist 基本上只需要一个操作 更新末尾数组元素的引用 而使用链表你必须做更多的事情 例如创建一个新节点 更新 2 个引用 遍历链表并更新最后一个节点以指向新节点等 但是我