首页 > 其他分享 >使用LinkedList实现队列和栈

使用LinkedList实现队列和栈

时间:2024-07-31 21:29:38浏览次数:12  
标签:调用 LinkedList 队列 元素 实现 空则 移除

LinkedList底层是由双向链表实现的,因此可以支持Queue和Stack。
本文讨论的实现基于JDK8源码。

实现Queue

LinkedList本身实现了Queue接口。

入队

方法签名 接口说明(JDK手册) 代码实现概括(JDK8)
boolean add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。 last处插入新节点
boolean offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。 直接调用add()

出队

方法签名 接口说明(JDK手册) 代码实现概括(JDK8)
E element() 获取,但是不移除此队列的头。 取首元素,首元素为空则抛NoSuchElementException异常
E peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。 取首元素,首元素为空则返回null
E poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 调用unlinkFirst()移除首元素
E remove() 获取并移除此队列的头。 调用removeFirst(), 比unlinkFirst()多了一个校验,如果首元素为空则抛NoSuchElementException异常

实现Stack

Stack类已经比较老,官方已不推荐使用,推荐使用LinkedList替代。

Stack不推荐使用的原因

  • 扩展于Vector,Vetcor同样不被推荐;会暴露Vector的方法
  • 底层使用数组,有扩容性能问题
  • 方法中加了synchronized,性能问题,同时并不能完全保证并发场景下没有问题

栈操作

方法签名 接口说明(JDK手册) 代码实现概括(JDK8)
push(E e) 将元素推入此列表所表示的堆栈。 调用addFirst() (即linkFirst())
E peek() 获取但不移除此列表的头(第一个元素)。 取首元素,首元素为空则返回null
E poll() 获取并移除此列表的头(第一个元素) 调用unlinkFirst()移除首元素
E pop() 从此列表所表示的堆栈处弹出一个元素。 调用removeFirst(), 比unlinkFirst()多了一个校验,如果首元素为空则抛NoSuchElementException异常

标签:调用,LinkedList,队列,元素,实现,空则,移除
From: https://www.cnblogs.com/wuyuegb2312/p/11969440.html

相关文章

  • 单链表的实现
    1、开辟内存/************开辟内存**************/SLTNode*BuyListNode(SLTDataTypex){ SLTNode*newnode=(SLTNode*)malloc(sizeof(SLTNode)); if(newnode==NULL) { printf("mallocfailed\n"); exit(-1); } newnode->data=x; newnode->next=......
  • 细流汇海:在sklearn中实现增量特征聚类标签分配
    细流汇海:在sklearn中实现增量特征聚类标签分配在机器学习领域,聚类是一种无监督学习方法,用于将数据点分组成多个簇,使得同一簇内的数据点相似度高,而不同簇内的数据点相似度低。scikit-learn(简称sklearn)提供了多种聚类算法,但大多数算法都是批量处理的,对于动态数据或在线学习场......
  • 动态之美:Laravel动态路由参数的实现艺术
    动态之美:Laravel动态路由参数的实现艺术在Web开发中,路由是应用程序的神经系统,它负责将请求映射到相应的处理逻辑。Laravel框架提供了一种强大而灵活的路由系统,允许开发者定义动态路由参数,从而创建更具动态性和可扩展性的Web应用。本文将深入探讨Laravel的动态路由参数,解释......
  • 全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函
    全网最适合入门的面向对象编程教程:29类和对象的Python实现-断言与防御性编程和help函数的使用摘要:在Python中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条件。本文主要介绍了断言的应用场景和特点以及assert语句的使用,同时介绍了防御性编程和help()函数......
  • 基于Java+SSM+jsp的医药管理系统的设计与实现(源码+数据库+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SSM框架前端框架JSP可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 基于ASP.NET的医院病历管理系统设计与实现(源码+数据库+部署)
    文章目录前言详细视频演示项目运行截图技术框架后端采用.NET框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • iStore实现 SmartDNS + AdGuard Home IP优选+广告屏蔽
    iStore实现SmartDNS+AdGuardHomeIP优选+广告屏蔽参考自openwrt官方版安装配置AdGuardHome+smartdns告别广告烦扰教程软路由实测系列五SmartDNS和AdGuardHome都是用于优化DNS解析和提供广告拦截功能的工具,但它们各自有不同的特点和用途:SmartDNS主要功......
  • FPGA开发——按键控制LED的实现
    一、概述在上一篇文章中我们学习了按键的相关消抖及其使用,在这篇文章当中我们就针对通过按键实现LED的控制。1、按键原理图2、基本框架通过我们前面编写的按键消抖的文件和LED文件将按键和LED两个模块进行交互,从而达到按键控制LED的目的。 二、代码编写1、首先是按键......
  • Android开发 - (适配器)Adapter类中CursorAdapter实现类详细解析
    作用将Cursor对象中的数据与AdapterView组件(如ListView、GridView等)进行绑定。以下是CursorAdapter的主要作用:1.数据源绑定数据源连接:CursorAdapter通过Cursor对象作为数据源,实现了从数据库或其他数据源(如ContentResolver查询结果)中读取数据的功能。这使得开发者能够轻松地......
  • 自定义线程池实现(一)
    预期目标1.实现一个相对完备的线程池2.自定义拒绝策略(下一节)线程池的基本参数1.核心线程数2.超时时间3.拒绝策略(在下一篇中添加)4.工作队列5.任务队列工作机制当添加一个任务到线程池中时,线程池会判断工作线程数量是否小于核心线程数,若小于创建工作线程,执行任务;反......