ArrayDeque和LinkedList的区别

2023-05-16

区别:
ArrayDeque:内部以数组的形式保存集合中的元素,因此随机访问元素时有较好的性能,插入删除时性能较差。
LinkedList:内部以双向链表的形式来保存集合中的元素,因此随机访问集合中的元素时虽然性能较差,但在插入、删除元素时性能较好。

我比较喜欢使用ArrayDeque或者LinkedList来模拟实现栈或者队列,但最近遇到了一个问题,在一段程序中,我使用LinkedList模拟时是正常的,使用ArrayDeque模拟会报空指针异常。

那段程序我模拟了队列,调用了其中的方法offer,究竟是什么原因呢,我们可以看一下各自的源码:

ArrayDeque:它的offer方法底层调用addLast方法

    public void addLast(E e) {
        if (e == null)
            throw new NullPointerException();
        final Object[] es = elements;
        es[tail] = e;
        if (head == (tail = inc(tail, es.length)))
            grow(1);
    }

LinkedList:它的offer方法底层调用linkLast方法

    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++;
    }

看了二者的源码之后,可以知道,ArrayDeque它是不允许储存null的,当我们想保存一个null时,它会抛出一个空指针异常错误,而LinkedList则不会检查是否为空。

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

ArrayDeque和LinkedList的区别 的相关文章

  • C++ 标准库或其他广泛使用的库中的单链表?

    好像C 标准库里只有双向链表 没有单链表 吧 是否有广泛使用的带有单链表的 C 库 有的是slist http www boost org doc libs 1 35 0 doc html intrusive slist htmlBoost
  • 如何引用数组列表中的数组元素?

    我创建了一个LinkedList of String arrays public static void main String args String one new String 10 String two new String 10
  • 高效的数据结构,用于快速随机访问、搜索、插入和删除

    我正在寻找一种数据结构 或多个结构 它可以让我保留一个有序的整数列表 没有重复项 并且索引和值在同一范围内 我需要四个主要操作才能高效 按重要性的粗略顺序排列 从给定索引中获取值 查找给定值的索引 在给定索引处插入值 删除给定索引处的值 使
  • 何时应使用链表的现实世界示例有哪些?

    另一位程序员提到 在他的职业生涯中 他们还没有在任何专业软件中找到使用链表数据结构的用例 我一时想不出什么好的例子 他主要是 C 和 Java 开发人员 谁能举一些例子来说明这是解决特定现实世界问题的正确数据结构 Related 链表的实际
  • 链接列表。按顺序插入整数

    我有一个整数链表 当我插入一个新节点时 我需要不是在末尾插入它 而是按顺序插入 即2 4 5 8 11 12 33 55 58 102等 我不认为我正在将其插入正确的位置 看到我做错了什么了吗 Node newNode new Node s
  • LinkedList 为同一功能提供了多种方法 - 为什么? [复制]

    这个问题在这里已经有答案了 我正在检查Java util LinkedList类 发现Linked List类提供了几个方法 public void addFirst E e public boolean offerFirst E e pu
  • 对链表进行分区

    我正在尝试基于链表数据结构来解决这个算法问题 问题如下 给定一个链表和一个值 x 对其进行分区 使得所有小于 x 的节点都位于大于或等于 x 的节点之前 您应该保留两个分区中节点的原始相对顺序 例如 给定 1 gt 4 gt 3 gt 2
  • 为什么链表使用指针而不是在节点内存储节点

    我之前在 Java 中广泛使用过链表 但我对 C 还很陌生 我正在使用项目中提供给我的这个节点类 效果很好 class Node public Node int data int m data Node m next 但我有一个问题没有得到
  • 对链接列表进行排序

    我用 C 编写了一个基本的链表类 它有一个 Node 对象 它 显然 代表列表中的每个节点 代码中没有使用IEnumerable 但是我可以实现排序功能吗 我使用的语言是C C 中有这样的例子吗 我正在从这个工作sample http ww
  • C++ 通用链表

    对于下面的代码 include
  • 如何在 d3 力定向图中突出显示(更改颜色)所有连接(邻居)节点和链接

    我在这里看到了这个例子http www d3noob org 2013 03 d3js force directed graph example basic html http www d3noob org 2013 03 d3js for
  • 如何编写一个函数来测试链接列表是否已排序

    我查看了其他帖子 但没有找到适合我的查询的很好的解决方案 我不想对链接列表进行实际排序 我想看看它是否已排序 我有一个 C 中的链表问题 我被要求编写一个给定链表定义的函数来查看它是否已排序 实现函数 isSorted 如果链表中的值按升序
  • C 中链表的插入排序?

    我尝试寻找与我类似的问题 但没有找到太多帮助 我有一个此类结构的链接列表 struct PCB struct PCB next int reg1 reg2 我首先创建 10 个 PCB 结构 以这种方式链接在一起 for i 20 i lt
  • arraylist 和 linkedList 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 何时使用 LinkedList 而不是 ArrayList https stackoverflow com questions 322715 when to use linkedlist over a
  • Java LinkedList ListIterator 行为

    我正在 java util LinkedList 上使用 java util ListIterator 期望它像以下伪代码一样工作 list 1 2 3 4 iterator next should be 1 iterator next s
  • 如何使 Java 中的自定义泛型类型链表排序?

    我正在用 java 编写自己的泛型链表 而不是使用 java 集合链表 链表的add方法由以下代码组成 public void add T item int position Node
  • 链表、数组和硬件内存缓存

    虽然之前有人问过关于链表与数组的问题 但答案大多归结为我们大多数人在某些时候可能已经学到的东西 列表擅长插入和删除 数组擅长随机访问 现在 像 Bjarne Stroustrup 这样受人尊敬的人已经argued https www you
  • Java:删除链表中的所有元素

    Java中如何删除链表中的所有元素without使用已经可用的clear 方法 这项练习的灵感来自于电话采访中收到的一个问题 说我可以用 C 来做这个 void DeleteAllElement ListElement head ListE
  • 在 C# 中创建循环链表?

    在 C 中创建循环链表的最佳方法是什么 我应该从 LinkedList 集合中派生它吗 我计划使用这个链接列表创建一个简单的地址簿来存储我的联系人 这将是一个糟糕的地址簿 但我不在乎 因为我将是唯一使用它的人 我主要只是想创建关键链接列表
  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表

随机推荐

  • 给项目日志加上traceid

    给日志加上traceid traceid是什么 xff1f 这里所说的traceid是指在服务端收到客户端请求后到服务端返回给客户端结果的过程中给没一条日志添加一个相同的traceid来跟踪请求到返回的整个过程 为什么要给服务的日志加上tr
  • 小白都能看懂的C语言入门教程

    文章目录 C语言入门教程1 第一个C语言程序HelloWorld2 C语言的数据类型3 常量变量的使用4 自定义标识符 define5 枚举的使用6 字符串和转义字符7 判断和循环8 函数9 数组的使用10 操作符的使用11 结构体12 指
  • HTML5:超链接基础知识

    超链接的概念 超链接是指从一个网页指向一个目标的连接关系 xff0c 这个目标可以是另一个网页 xff0c 也可以是相同网页上的不同位置 xff0c 还可以是一个图片 xff0c 一个电子邮件编辑器 xff0c 一个音频或视频文件 xff0
  • 【树莓派4B】安装Ubuntu Mate20.04+ROS Noetic+使用电脑自带的xrdp和VNC进行PC端远程控制

    目录 前言 一 烧录Ubuntu Mate20 04 1 下载Ubuntu Mate 20 04 2 格式化SD卡并烧录系统 3 打开SSH功能 二 配置Ubuntu环境 1 初次开机进行简单的配置 2 更换国内源 3 更新软件列表和软件
  • 字符串分类统计(C语言)

    题目要求 xff1a 输入一行字符 xff0c 分别统计出其中英文字母 数字 空格和其他字符的个数 思路一 xff1a 对于这道题 xff0c 我们可以采用C语言本身自带的库函数来进行完成 xff0c 利用 lt ctype h gt 这一
  • 获取微信所有聊天记录数据并通过Python制作词云图

    获取微信所有聊天记录数据并通过Python制作词云图 前言 本文纯原创 xff0c 仅供学习 交流使用 不具有任何商业用途 xff0c 版权归作者所有 xff0c 如有问题请及时联系我以作处理 作者仅为一名大二学生 xff0c 能力有限 x
  • 给定秒数seconds (0< seconds < 100,000,000),把秒转化成小时、分钟和秒

    include lt stdio h gt int main void int seconds scanf 34 d 34 amp seconds printf 34 d d d n 34 seconds 3600 seconds 3600
  • 大数据开发·关于虚拟机Hadoop完全分布式集群搭建教程

    hadoop完全分布式集群搭建 一 搭建准备1 安装VMware虚拟机2 Xshell 7 远程客户端及Xftp 7安装3 搭建模板虚拟机hadoop100配置虚拟机网络为虚拟机普通用户配置root权限 4 克隆三台虚拟机用于搭建完全分布式
  • 新手村——如何改变CSDN代码块背景样式

    1 在电脑上登录自己CSDN账号 xff1b 2 按如下指示操作 xff1a 鼠标滑动至头像处 xff0c 点击下方的内容管理 xff1b 3 在左方中一直下滑 xff0c 找到设置中的博客设置 xff1b 4 在代码样式片中选择自己喜欢的
  • SQL基本命令

    创建数据库 CREATE DATABASE shop 创建数据库命名为 shop 创建表格 CREATE TABLE Product 创建表格命名为 product id CHAR 4 NOT NULL name VARCHAR 100 N
  • 基于docker轻松部署selenium grid环境

    做web自动化的同学都知道selenium grid非常好用 xff0c 但是环境配置特别麻烦 xff0c 很多人都躺在了环境搭建 那么有没有更简单的方式呢 xff0c 答案是肯定的 xff0c 今天我们就用docker来完成它 xff0c
  • lua中如何实现打印行号和当前函数名?

    lua中如何实现打印行号和当前函数名 xff1f lua中可以使用debug的get info方法来获取当前的堆栈信息 xff0c 进而可以打印出相关的环境信息 xff0c 具体信息包括 table span class token pun
  • 【C语言】辗转相除法求最大公约数(详细解释)

    目录 证明 xff1a 假设有两个数X和Y xff0c 求最大公约数 xff08 最大公因数 xff09 证明 xff1a 下面证明Y R之间的最大公约数也是X Y之间的最大公约数 xff1a 简单归纳 xff1a 举个例子 xff0c 求
  • idea如何设置背景图

    写在前面 作为一个Java开发者 xff0c 我想大家肯定都知道IDEA这个编译器吧 xff0c 但是idea默认的背景并不是很美观 xff08 应该说很丑 xff0c 个人感觉哈 xff09 那么如何更换背景呢 xff08 此方法同样适用
  • W: GPG error: cudnn GPG key 错误

    apt key Error cudnn安装完毕后出现错误 xff0c 显示软件源没有gpg key验证 xff0c 网上都是清一色的sudo apt key adv keyserver keyserver ubuntu com recv k
  • 初学者学习如何使用IntelliJ IDEA 创建一个 Java 项目,如何建包,建类,且若有多个包同时存在,如何运行指定包,带图分享

    文章目录 一 创建java项目二 创建包三 创建类四 多个包同时存在 xff0c 运行指定包五 学习秘籍 一 创建java项目 以IntelliJ IDEA 2021为例 xff1a 打开之后是一个2021的初始界面 xff0c 点击新建项
  • Java中基本数据类型和引用数据类型存放的位置(栈内存和堆内存)

    1 基本数据类型 java中的基本数据类型可以在栈中直接分配内存 xff0c 它有以下八种 xff1a boolean xff0c byte xff0c char xff0c short xff0c int xff0c long xff0c
  • 转义字符表

    转义字符和所对应的意义 xff1a 注意 xff1a 1 区分 xff0c 斜杠 xff1a 与 反斜杠 xff1a 此处不可互换 xff1b 2 xhh 十六进制转义不限制字符个数 x000000000000F 61 61 xF xff0
  • Java中String类的几种常见遍历方式

    今天小小的给自己总结一下String类的几种常见遍历方式 xff0c 如下 charAt charAt int index 返回 char指定索引处的值 span class token keyword public span span c
  • ArrayDeque和LinkedList的区别

    区别 xff1a ArrayDeque xff1a 内部以数组的形式保存集合中的元素 xff0c 因此随机访问元素时有较好的性能 xff0c 插入删除时性能较差 LinkedList xff1a 内部以双向链表的形式来保存集合中的元素 xf