LinkedList中add,addLast,offer,pollLast,removeLast等区别

LinkedList 集合常用方法 Linked List 是 java.util 包中 Collection 框架的一部分。 > LinkedList 数据结构的实现,它是一种线性数据结构,其中元素不存储在连续位置,每个元素都是一个单独的对象,具有数据部分和地址部分。 > 元素使用指针和地址链接。每个元素称为一个节点 阅读详情
AI摘要

本文详细分析了LinkedList中addLast()、add()、offer()、offerLast()的区别,以及pollFirst()、removeFirst()之间的异同。addLast()和add()在LinkedList中等价,都是将元素添加到队尾。offer()在无容量限制时等同于add(),但在有容量限制的队列中,offer()不会抛出异常而是返回false。offerLast()与addLast()效果相同,都会在队尾添加元素并返回true。pollFirst()和removeFirst()的区别在于,当队列为空时,pollFirst()返回null,而removeFirst()抛出异常。建议在适当场景下优先使用offer()和pollFirst()进行队列操作。

1、addLast() 与add()区别

    /**
     * Appends the specified element to the end of this list.
     *
     * <p>This method is equivalent to {@link #add}.
     *
     * @param e the element to add
     */
    public void addLast(E e) {
        linkLast(e);
    }

直接上手读源码,addLast() 的作用是将元素链接到队列尾部。

/**
 * Appends the specified element to the end of this list.
 *
 * <p>This method is equivalent to {@link #addLast}.
 *
 * @param e element to be appended to this list
 * @return {@code true} (as specified by {@link Collection#add})
 */
public boolean add(E e) {
    linkLast(e);
    return true;
}

然而add()在将元素链接到队列尾部后,还返回true。

总结:addLast() 仅仅将元素链接到队列尾部。 然而add()不仅将元素链接到队列尾部,还返回true。

PS: 自然的根据对称之美,有addLast()自然就会有addFirst(),源码如下:

    /**
     * Inserts the specified element at the beginning of this list.
     *
     * @param e the element to add
     */
    public void addFirst(E e) {
        linkFirst(e);
    }

addFirst()仅将元素链接到队列首。

2、add()和offer()区别

首先需要知道LinkedList实现了Deque接口,而Deque接口继承了Queue接口。

而在Queue接口中对于add()和offer()的区别是这样介绍的。

add方法:
 @return {@code true} (as specified by {@link Collection#add})
 @throws IllegalStateException if the element cannot be added at this time due to capacity restrictions

在不违背队列的容量限制的情况,往队列中添加一个元素,如果添加成功则返回true。
如果因为容量限制添加失败了,则抛出IllegalStateException异常  
 offer方法:
 
 @return {@code true} if the element was added to this queue, else  {@code false}
 
 在不违背容量限制的情况,往队列中添加一个元素,如果添加元素成功,返回true,
 如果因为空间限制,无法添加元素则,返回false;
     
 在有容量限制的队列中,这个offer方法优于add方法。
 因为抛异常处理更加耗时,offer直接返回false的方式更好

而在LinkedList中的源码可以看到如下:

  /**
     * Adds the specified element as the tail (last element) of this list.
     *
     * @param e the element to add
     * @return {@code true} (as specified by {@link Queue#offer})
     * @since 1.5
     */
    public boolean offer(E e) {
        return add(e);
    }

offer()直接调用了add()方法。所以在LinkedList中add()与offer()的使用相当于是一样的。

3、offerLast()与addLast()区别

同样上源码来看:

    /**
     * Appends the specified element to the end of this list.
     *
     * <p>This method is equivalent to {@link #add}.
     *
     * @param e the element to add
     */
    public void addLast(E e) {
        linkLast(e);
    }

addLast()只将元素链接到队列尾

    /**
     * Inserts the specified element at the end of this list.
     *
     * @param e the element to insert
     * @return {@code true} (as specified by {@link Deque#offerLast})
     * @since 1.6
     */
    public boolean offerLast(E e) {
        addLast(e);
        return true;
    }

offerLast()将元素链接到队列尾并返回true。

所以能看出offerLast()和add()效果又是一样的。

4、pollFirst()与removeFirst区别

上手源码:

    /**
     * Removes and returns the first element from this list.
     *
     * @return the first element from this list
     * @throws NoSuchElementException if this list is empty
     */
    public E removeFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return unlinkFirst(f);
    }

删除并返回队列首元素,若队列为空则抛出Exception ! 这是1.2的版本,由于抛出异常处理起来较为麻烦。所以在1.6版本中推出了poll家族,pollFirst()如下;

     /**
     * Retrieves and removes the first element of this list,
     * or returns {@code null} if this list is empty.
     *
     * @return the first element of this list, or {@code null} if
     *     this list is empty
     * @since 1.6
     */
    public E pollFirst() {
        final Node<E> f = first;
        return (f == null) ? null : unlinkFirst(f);
    }

删除并返回队列首元素,若队列为空则返回null。 处理起来友善很多。

所以同样的:peekFirst()与getFirst()也是这样的关系:
peek()和peekFirst()都是返回但不删除头部元素,若空就返回null。 peekLast() 返回但不删除尾部元素,@since 1.6

getFirst(), getLast(),get(int index) 若出错会抛出异常,不建议使用。@since 1.2

总结

  • 需要链接元素到队列尾时优先用offer()
  • 查看元素优先使用peek()
  • 删除元素优先使用poll()

特别情况:

  • 想要在指定索引位置链接元素可以使用add(int index, E element)
  • 获取指定索引的元素可以使用get(int index)
  • 修改指定索引的元素可以使用set(int index, E newElement)
剑指offer(Java实现) 从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路 利用队列(链表)辅助实现。 代码实现 import java.util.ArrayList; import java.util.LinkedList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode r... 阅读详情

相关推荐

Java中的双端队列操作:使用Deque的addFirst和addLast函数

双端队列(Deque)是一种特殊的队列,它允许在队列的两端进行插入和删除操作。本文将详细介绍如何使用Java中的Deque的addFirst和addLast函数进行双端队列操作,并提供相应的源代码示例。为了避免这种情况,可以使用offerFirst和offerLast函数,它们与addFirst和addLast函数的作用相同,但是在队列已满时会返回特定的值来表示添加操作是否成功。在上述示例中,我们首先使用addFirst函数在队列的开头添加了三个元素,然后使用addLast函数在队列的结尾添加了三个元素。

UtdPatch的博客 453

【LinkedList】常用方法大全

linkedlist常用方法大全

m0_44946030的博客 3049

Java集合框架、并发修改异常、Lamabda表达式

javaList/map面试题

の博客 565

LinkedList初认识

LinkedList初认识 LinkedList特点 1、存入和读取的顺序一致 2、元素可以重复 3、所有内部元素的操作都基于双向链表的需要进行 创建LinkedList对象 LinkedList linkedList=new LinkedList() LinkedList常用的几种方法 1、add方法 import java.util.LinkedList; public class LinkedList1 { public static void main(String[] args

qq_62086412的博客 642

UnityWebGL异常捕获全攻略:从报错提示到完美解决的3种配置方案

本文详细解析了UnityWebGL项目中异常捕获的三种核心配置方案:禁用异常、仅捕获显式异常以及完全捕获异常(无堆栈跟踪)。通过对比不同方案在构建体积、运行性能及错误信息详细度上的差异,帮助开发者根据开发、测试与发布阶段的不同需求,选择并配置最优的异常处理策略,从而有效提升WebGL应用的调试效率和线上稳定性。

5f4d3s2a1q的博客 398

手把手实战:RK3588上YOLOv8模型从训练到部署全流程解析

本文详细解析了在RK3588开发板上部署YOLOv8目标检测模型的全流程。从模型训练、正确导出适配的ONNX格式,到使用RKNN-Toolkit2进行模型转换与量化,最后在板卡上完成部署与性能测试。文章提供了完整的代码示例和关键避坑指南,帮助开发者高效实现嵌入式AI应用落地。

weixin_28224217的博客 403

linkedlist的所有调用方法

pollFirst():删除头;  特有方法 pollLast():删除尾;  特有方法 pop():和removeFirst方法一致,删除头。  poll():查询并移除第一个元素     特有方法    remove() :移除链表中第一个元素;    通用方法   remove(E e):移除指定元素;   通用方法 removeFirst(E e):删除头,获取元素并删除;  特有方法 ...

cxfjava的博客 595

ISE 14.7 MCS文件的生成--- Spartan3AN XC3S200AN

步骤一: Generate Programming File生成 .bit文件 步骤二: Tools——>iMPCAT 步骤三: iMPACT Flows——>双击“Create PROM File(PROM File Formatter)” 步骤四: Non-Volatile FPGA——>点击”Spartan 3AN“——>点击“绿色箭头”——>Spartan3AN(bits)——>选择“xc3s200an"——>点击”Add storage Device“—

qq_40039676的博客 2099

Java LinkedList深度解析:从双向链表原理到实战场景选型

链表作为一种基础的数据结构,通过节点间的引用连接实现动态数据存储,其核心原理在于非连续的内存分配和高效的节点操作。在Java集合框架中,LinkedList基于双向链表实现,每个节点包含数据与前驱、后继引用,这使得其在已知节点位置的插入与删除操作上具有O(1)的时间复杂度优势,尤其适合频繁增删的场景。从技术价值看,理解链表与数组(如ArrayList)的根本差异,是进行数据结构选型、优化程序性能的关键。在实际工程中,LinkedList不仅可作为List使用,还能作为Deque实现栈、队列等功能,常用于需要

weixin_34279184的博客 404

北斗导航 | 卡尔曼滤波与因子图优化对比(附图优化matlab代码)

- 历史数据利用:因子图通过滑动窗口保留历史状态,优化时联合多帧数据;卡尔曼滤波仅依赖当前和上一帧状态 。 - 迭代优化:因子图通过多次迭代逼近最优解,卡尔曼滤波仅单次更新 。 - 误差抑制:因子图的多次线性化可有效抑制非线性误差(如GNSS伪距观测的非线性) 。

尘世冰封的专栏 1299

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

Boss Show Time 完整指南:在四大招聘平台实时显示职位发布时间

Boss Show Time 是一款 Chrome 招聘网站时间显示扩展,在 Boss直聘、智联招聘、前程无忧、拉勾招聘四大平台实时显示职位发布时间。写给不想再盲目投递的求职者。 ## 列表里排第一的岗位,可能已经挂了两个月 你打开招聘列表,排在第一的岗位写着“活跃今天”,点进去才发现它两个月前就发布了。你花一下午投递,一条回复都没有。 隐藏发布时间是招聘平台的普遍做法。你不知道哪些岗位刚挂

gitblog_01092的博客 169

5G射频设计中N77&N79的PRX为什么需要3个SRS

首先,我们来逐个拆解一下这个神秘的“

weixin_43199439的博客 1323

optimizerDuck 完整指南:Windows 10/11 安全调优与一键还原

optimizerDuck 是一款免费开源的 Windows 优化工具,把关遥测、精简后台服务、移除预装应用这类操作整理成看得懂的开关,不需要你碰注册表,改错了也能撤回去。适合刚装好 Windows 10/11、不知道该动哪些开关的新手。全文按顺序讲清:前置条件、首次运行、七类优化,以及出问题的退路。 [![optimizerDuck 主界面展示优化项与风险等级](https://raw.git

gitblog_01192的博客 255

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4593

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1307

Java LinkedList深度解析:双向链表原理、性能对比与实战应用

链表作为一种基础数据结构,通过节点间的引用连接实现动态数据存储,其核心原理在于每个节点包含数据与指向相邻节点的引用。在Java集合框架中,LinkedList基于双向链表实现,每个节点同时持有前驱和后继引用,这使得在头部或尾部进行插入、删除操作的时间复杂度为O(1)。这种结构特别适合频繁增删的场景,例如实现队列、栈或需要大量中间插入的操作。从技术价值看,LinkedList弥补了ArrayList在随机插入删除时需整体数据搬移的不足,提供了更灵活的内存管理。在实际应用场景中,它常被用于消息队列、撤销操作历史

weixin_30788239的博客 306

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java 集合

定义:集合框架是一套标准化的接口和类,用来操作一组对象。它将各种数据结构(如动态数组、链表、队列、集合等)转换为Java中的类,并为其定义统一的操作方式。作用简化编程:集合框架提供了一组常用的数据结构和算法,开发者无需重复编写基本的存储、查找、排序等操作。可扩展性:通过标准接口和抽象类,开发者可以轻松实现自定义的数据结构并与框架兼容。提高效率:集合框架中的许多实现都是高度优化的,适用于各种场景的性能需求(如快速查找、增删、排序等)。提高代码的可维护性。

m0_73837751的博客 1258

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

栈和队列详细讲解

本文介绍了栈数据结构的概念、操作及Java实现。栈是一种遵循后进先出(LIFO)原则的线性表,主要操作包括入栈(push)、出栈(pop)、查看栈顶(peek)和判空(isEmpty)。文章详细讲解了Java中Stack类的使用方法,包括核心方法的功能说明和使用示例,并提供了自定义栈的底层模拟实现代码。同时区分了数据结构中的栈与内存区域的栈的概念差异,最后通过两道练习题(出栈顺序判断和栈的压入弹出序列验证)巩固栈的应用。

深耕 Java 后端,沉淀技术知识,记录成长之路。 838

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java集合框架核心接口全解析:List、Set、Queue、Map一网打尽

Java集合框架(JCF)并不是一堆实现类的简单堆砌,它的根基是接口抽象。从Iterable与Collection的顶层分工,到List、Set、Queue、Map各自的语义边界,接口决定了数据结构的行为契约与扩展方向。理解这些接口,才能在方法签名中面向接口编程,在存储选型时基于遍历方式、唯一性、有序性和并发需求做出合理判断。无论是ArrayList与LinkedList的性能取舍,还是HashMap与TreeMap的应用场景区分,最终都回归到对接口职责的把握。掌握JCF接口体系,是写出高扩展性Java代码

weixin_33423874的博客 279

OI/ICPC 竞赛中的 Java 进阶实战指南:快速 IO、BigInteger 与集合框架全解析(OI-wiki)

本文是 OI-wiki 语言板块中针对 Java 选手的进阶实战指南,聚焦于竞赛中真正决定成败的几类技术点:高速输入输出、`BigInteger` 高精度与数论运算、基本类型与包装类型的差异、继承多态接口等面向对象特性、Lambda 表达式,以及 `Collection` 集合框架、`Arrays`/`Collections` 工具类的正确选型与复杂度分析。读完本文,你将获得一套可直接复制进代码仓

gitblog_00694的博客 331

java Queue中 remove/poll, add/offer, element/peek区别

这里简单对其重复的方法做点简单的区分。 offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。 这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。    poll,remove区别: remove() 和 poll() 方法都是

JackyLau的专栏 7万+

java addlast_Java LinkedList addLast()方法与示例

LinkedListaddLast()方法软件包java.util.LinkedList中提供了此方法。此方法用于在链接列表的最后或结尾阶段插入对象。语法:voidaddLast(Objecto){}参数:我们只能在方法中传递一个对象作为参数,并且该对象将添加到链接列表的末尾。返回值:此方法的返回类型为void,表示此方法不返回任何内容。Java程序演示LinkedListaddLast()方...

weixin_39725193的博客 1620

LinkedList的offer,poll和peak方法

shuangrenlong的博客 435

Java集合源码剖析——基于JDK1.8中LinkedList的实现原理

Java集合源码剖析——基于JDK1.8中LinkedList的实现原理

贝尔摩德苦艾酒 8201

LinkedList的push add offer操作有什么不同

add(不带索引默认添加到链表的最后)与offer一样都是添加操作,唯一的区别就是offer没有带索引参数的方法。 上面这两种操作方式是将LinkedList当作链表或队列来使用。而push操作是将LinkedList当作栈来使用。

MOWRONG的博客 4785
上一篇: 打家劫舍(动态规划)求数组所有非相邻数字的最大和
下一篇: 关于位运算以及原码反码补码
老邓CODING
博客等级 码龄8年 9粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值