Deque与Stack实现栈的区别

2023-11-14

使用Deque
允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),简称Deque。
Java集合提供了接口Deque来实现一个双端队列,它的功能:
①既可以添加到队尾,也可以添加到队首;
②既可以从队首获取,又可以从队尾获取。

在原来的queue的方法名上加了表示在队首还是队尾操作的表示(Last或First)。
Deque接口实际上扩展自Queue:

public interface Deque<E> extends Queue<E> {
    ...
}
1
2
所以说你是可以继续用add()/offer()的,但是为了能够看出操作 的位置还是写上比较好。
Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
LinkedList即是List,又是Queue,还是Deque。但是我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。

Deque<String> d2 = new LinkedList<>();
d2.offerLast("z");
1
可见面向抽象编程的一个原则就是:尽量持有接口,而不是具体的实现类。

Stack
栈的性质C的时候就学过了,先进后出,只需看下Java里对于他的方法有哪些
Stack的入栈和出栈的操作:
①把元素压栈:push(E);
②把栈顶的元素“弹出”:pop(E);
③取栈顶元素但不弹出:peek(E)。
在Java中,我们用Deque可以实现Stack的功能:
①把元素压栈:push(E)/addFirst(E);
②把栈顶的元素“弹出”:pop(E)/removeFirst();
③取栈顶元素但不弹出:peek(E)/peekFirst()。
Java的集合类并没有单独的Stack接口,因为有个遗留类名字就叫Stack,出于兼容性考虑,所以没办法创建Stack接口,只能用Deque接口来“模拟”一个Stack了。
当我们把Deque作为Stack使用时,注意只调用push()/pop()/peek()方法,不要调用addFirst()/removeFirst()/peekFirst()方法,那样会破坏栈的本质。
———————————————

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

Deque与Stack实现栈的区别 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分

随机推荐

  • 群辉nas看剧设置

    首先打开NAS的后台页面 打开 控制面板 然后依次点开 文件服务 SMB 高级设置 在最小SMB协议后面的方框选择 SMB1 然后点击 保存 按钮即可 这里这样设置的原因是因为还有很多旧设备只支持SMB1 我几年前的电视盒子就是这样 如果不
  • Android ProgressBar颜色设置

    ProgressBar的颜色和设置的默认主题相关联 在styles xml中
  • 解决drawerlayout嵌套listview 导致listview不能滑动的问题

  • windows10复制粘贴键突然失效 的一个最简单的解决方法

    今天复制粘贴键突然失效 在网上捣鼓了好多方法都不行 最后发现 看看你有没有在用加密视频 有就把它关了 关了就好了
  • react-router-dom的路径匹配 属性exact 与strict

    在这里先介绍一个比较难以描述的坑 在使用react router的时候我首先就是先在react router的官网上去看她的官方文档 然后按照上面的教程来在自己的react工程中使用react router 但是基本应该会遇到问题 原因就是
  • 小程序---365笔记第11天---微信小程序登录接入

    接入前的准备工作参考文档 微信小程序登录接入 必做 登录逻辑 小程序登录逻辑梳理 使用插件参考文档 https developers weixin qq com miniprogram dev framework plugin using
  • windows下WS2tcpip.h和windows.h报错

    include
  • java.lang.NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment

    最近做项目遇到场景 通过前端提交的JAVA代码 创建java文件 然后再编译JAVA文件称class文件 具体实现的细节 就不细说了 最后执行的结果能正常执行 但控制台报错 Can t initialize javac processor
  • Zotero

    用户笔记区代码问题 用户笔记区用于记录阅读文献中的总结 是很重要的笔记模块 Zotero IF 插件提供了obsidian用户笔记区这一功能 很有用 但经本人实际使用发现 Zotero IF插件官网给的用户笔记区模板并不实用 主要存在以下几
  • 【牛客刷题专栏】0x32:JZ45 把数组排成最小的数(C语言编程题)

    前言 个人推荐在牛客网刷题 点击可以跳转 它登陆后会保存刷题记录进度 重新登录时写过的题目代码不会丢失 个人刷题练习系列专栏 个人CSDN牛客刷题专栏 题目来自 牛客 题库 在线编程 剑指offer 目录 前言 问题描述 解法思路 代码结果
  • 数字信号带宽讲解

    引言 在学习和工作中 经常和数字信号打交道 但是经常会接触到数字信号的带宽 对于这一概念 我理解的并不是很透彻 所以今天来抽丝剥茧 把这一概念彻底理解清楚 内容引申 要理解数字信号带宽 就先要了解信号的上升时间 上升时间 上升时间的概念 任
  • Win定时任务更新SVN库

    找到计算机管理 右击任务计划程序库 gt 创建基本任务 填写好名称和描述 NEXT NEXT NEXT 这里选择好svn exe 参数配置成 update D your dictionary NEXT 设置属性 选择触发器 gt 编辑 设置
  • 修改docker容器中文件(配置文件)

    背景 在使用docker搭建hadoop时需要修改docker容器里的文件 不想装ubutu所以在容器里用不了vim命令修改文件 1 查看所有容器名称和基本信息 docker ps 2 查看某个容器信息 docker inspect 容器名
  • 了解数据库的作用、特点及关系型数据库管理系统

    学习目标 能够知道数据库的作用数据库和数据库管理系统的关系 一 数据库 1 数据库的介绍 数据库就是存储和管理数据的仓库 数据按照一定的格式进行存储 用户可以对数据库中的数据进行增加 修改 删除 查询等操作 2 数据库的分类 关系型数据库
  • 干货渗透测试面试题汇总

    干货 渗透测试面试题汇总 以下为信息安全各个方向涉及的面试题 星数越多代表问题出现的几率越大 没有填答案是希望大家如果不懂能自己动手找到答案 祝各位都能找到满意的工作 注 做这个List的目标不是全 因为无论如何都不可能覆盖所有的面试问题
  • c++,父类引用指向子类对象,虚函数

    include
  • 还不错的全民采矿小程序源码+代码已开源

    正文 还不错的全民采矿小程序源码 代码已开源 可配合流量主和激励视频 程序是单开版的 一个站点只能单个平台使用此应用 一个小程序使用此应用 下方图片是小程序工具介绍 下方是程序介绍 程序 lanzou com iRgwE04a5d0d 图片
  • 基于嵌入式Linux/Qt 开发RFID智能仓储指纹管理系统

    基于嵌入式Linux Qt 开发RFID智能仓储指纹管理系统 Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架 它包括一个直观的API和一个丰富的类库 以及用于GUI开发和国际化的集成工具 另外它支持Java 和C 开发 利用它 我
  • AIX下装unzip和gzip

    做个标注 AIX下安装oracle需要解压zip文件 所以需要安装unzip文件包 首先确定aix里有没有rpm rte包 lslpp l grep i rpm rte 如果没有的话需要用aix安装盘安装这个包 我的系统里现在有这个包了 就
  • Deque与Stack实现栈的区别

    使用Deque 允许两头都进 两头都出 这种队列叫双端队列 Double Ended Queue 简称Deque Java集合提供了接口Deque来实现一个双端队列 它的功能 既可以添加到队尾 也可以添加到队首 既可以从队首获取 又可以从队