一、栈(Stack)

1. 栈的定义

  • 栈(Stack)是一种 先进后出(LIFO, Last In First Out) 的数据结构。

  • 就像一摞书:最后放的书最先拿走。


2. 栈的常用方法(Stack 类)

  • Stack<E> 继承自 Vector,是 线程安全 的,但性能一般。

  • 更推荐使用 Deque<E>(如 ArrayDequeLinkedList)来实现栈结构。

方法功能描述备注
push(E e)将元素压入栈顶相当于入栈操作
pop()弹出栈顶元素,并返回该元素栈为空时会抛 EmptyStackException
peek()查看栈顶元素,但不删除栈为空时会抛 EmptyStackException
empty()判断栈是否为空返回 truefalse
search(Object o)返回元素在栈中的位置(从 1 开始,栈顶为 1)找不到返回 -1

3. 使用示例

  • Stack<E> 继承自 Vector,是 线程安全 的,但性能一般。(下面的(1))

  • 更推荐使用 Deque<E>(如 ArrayDequeLinkedList)来实现栈结构。(下面的(2))

(1)使用 Stack
Stack<Integer> stack = new Stack<>();
stack.push(10);
stack.push(20);
stack.push(30);System.out.println(stack.peek()); // 30
System.out.println(stack.pop());  // 30
System.out.println(stack.pop());  // 20
System.out.println(stack.empty()); // false
(2)使用 ArrayDeque 模拟栈(推荐)
Deque<String> stack = new ArrayDeque<>();
stack.push("A");
stack.push("B");
stack.push("C");System.out.println(stack.pop()); // C
System.out.println(stack.peek()); // B

4. 栈的应用场景

  • 函数调用栈:保存方法调用现场(局部变量、返回地址等)。

  • 括号匹配:比如判断 ({[]}) 是否匹配。

  • 表达式求值:逆波兰表达式(后缀表达式)。

  • 回溯算法:比如迷宫寻路。

二、队列(Queue)

1. 队列的定义

  • 队列(Queue)是一种 先进先出(FIFO, First In First Out) 的数据结构。

  • 就像排队买票:先排队的人先买,后排的人要等前面的人买完。

  • 在 Java 中,Queue 是一个接口,继承自 Collection 接口。


2. 队列的常用方法(来自 Queue 接口)

方法功能
boolean add(E e)向队列尾部插入元素,若失败抛异常
boolean offer(E e)向队列尾部插入元素,失败时返回 false
E remove()删除并返回队首元素,队列为空时抛异常
E poll()删除并返回队首元素,队列为空时返回 null
E element()返回队首元素但不删除,队列为空时抛异常
E peek()返回队首元素但不删除,队列为空时返回 null

3. 常见的队列实现类

(1)LinkedList
  • LinkedList 实现了 Queue 接口,可以作为普通队列使用。

Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println(queue.poll()); // A
System.out.println(queue.peek()); // B
(2)PriorityQueue(优先队列)
  • 元素按 优先级排序(默认是自然顺序,小的优先)。

Queue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(1);
pq.offer(3);
System.out.println(pq.poll()); // 1
System.out.println(pq.poll()); // 3
(3)ArrayDeque(双端队列)
  • 推荐的队列实现,比 LinkedList 更高效。

  • 可以当队列(FIFO)或栈(LIFO)使用。

Queue<String> dq = new ArrayDeque<>();
dq.offer("A");
dq.offer("B");
System.out.println(dq.poll()); // A

4. 队列的应用场景

  • 排队系统:比如消息队列(RabbitMQ、Kafka)。

  • 缓冲区:比如网络 IO 中的数据缓冲。

  • 广度优先搜索(BFS):图/树的层序遍历。


三、栈和队列对比

特点栈(Stack)队列(Queue)
存取顺序LIFO(先进后出)FIFO(先进先出)
典型操作push 入栈,pop 出栈offer 入队,poll 出队
Java 实现类Stack, ArrayDequeLinkedList, ArrayDeque, PriorityQueue
应用场景函数调用栈、表达式计算、回溯消息队列、BFS、排队系统

总结

  • :适合 回溯 / 嵌套处理,强调后进先出。

  • 队列:适合 排队 / 顺序处理,强调先来先服务。

  • 推荐 使用 ArrayDeque 来实现队列和栈,性能比 LinkedListStack 更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95262.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95262.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95262.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FART 主动调用组件深度解析:破解 ART 下函数抽取壳的终极武器

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ FART 的主动调用组件 在 Android 逆向与脱壳领域&#xff0c;早期的自动化脱壳方案&#xff08;如 DexHunter、FUPK3&#xff09;主要运行在 Dalvik 环境&…

基于有限元分析法的热压成型过程中结构变形和堆积matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.部分程序 4.算法理论概述 5.完整程序 1.程序功能描述 在压印过程中&#xff0c;一般情况下&#xff0c;我们遵循质量&#xff0c;动量和能量守恒的原则进行仿真。然后建立偏微分方程组&#xff0c;然后通过有限元的…

CF每日3题(1500-1600)

1809C 神必构造题 对子数组的和考虑使用前缀和&#xff0c;发现逆序对的规律&#xff0c;构造1797C 神奇交互题 需要找特殊的点确定位置2132D 神奇数位题 需要用二分logk优化复杂度&#xff0c;把数位转换成能到的上限数aim 1809C 构造 前缀和 逆序对 思维 排序 1500 /* 神必构…

Linux学习——sqlite3

1.sqlite3的使用1.打开数据库sqlite3 stu.db //database2.操作输入 sqlite3&#xff0c;进入软件后&#xff0c;输入 sqlite3 软件自带的命令&#xff08;.help&#xff0c;.databases&#xff0c;quit&#xff0c;.exit&#xff09;3.增删改查增CREATE TABLE database_name.…

【线性代数基础 | 那忘算9】基尔霍夫(拉普拉斯)矩阵 矩阵—树定理证明 [详细推导]

之前学的不扎实导致现在还得回来再学。 专栏指路&#xff1a;《再来一遍一定记住的算法&#xff08;那些你可能忘记了的算法&#xff09;》 前置知识&#xff1a; 生成树&#xff1a;在一个无向连通图中&#xff0c;能够连接所有顶点的树结构。 点的度数&#xff1a;与这个点…

Chrome高危零日漏洞PoC公开,已被用于野外攻击

谷歌此前披露了Chrome浏览器V8 JavaScript引擎中存在一个高危零日漏洞&#xff08;CVE-2025-5419&#xff09;。而在近日&#xff0c;该漏洞的概念验证&#xff08;PoC&#xff09;利用代码已被公开。相关补丁已经发布&#xff0c;用户应尽快进行更新。 **核心要点** 1. CVE-2…

HTTP 接口调用工具类(OkHttp 版)

说明 HTTP 基本知识序号方法请求体描述1GET一般没有&#xff0c;可以有从服务器获取资源。用于请求数据而不对数据进行更改。例如&#xff0c;从服务器获取网页、图片等。2POST有向服务器发送数据以创建新资源。常用于提交表单数据或上传文件。发送的数据包含在请求体中。3PUT有…

Spring/Spring MVC/iBATIS 应用 HTTP 到 HTTPS 迁移技术方案

Spring/Spring MVC/iBATIS 应用 HTTP 到 HTTPS 迁移技术方案概述本方案详细介绍了将基于 Spring、Spring MVC 和 iBATIS 的传统 Java Web 应用从 HTTP 迁移到 HTTPS 的完整流程。这种传统架构的迁移需要考虑更多手动配置和兼容性问题。一、环境评估与准备工作1.1 当前环境分析首…

多智能体系统设计:5种编排模式解决复杂AI任务

当你有一个由研究员、文案、数据分析师和质检员组成的团队时&#xff0c;如果没有合理的协调机制&#xff0c;再优秀的个体也可能产生冲突的结论、停滞的流程&#xff0c;或者解决错误的问题。AI智能体同样如此。 随着系统从单体模型向多智能体架构演进&#xff0c;编排成为核…

CVPR上的多模态检索+视频理解,LLM助力提效翻倍

关注gongzhongaho【CVPR顶会精选】多模态研究正处在爆发期&#xff0c;从图文融合到视频、语音、传感器数据&#xff0c;模型能力边界不断扩展。顶会顶刊已将其视为具身智能与通用AI的核心方向。但写论文时常遇到痛点&#xff1a;方法多、任务杂&#xff0c;缺乏统一框架&#…

Docker部署单节点使用KRaft模式的Kafka3.8.0版本与可视化界面Kafka-Map

记录一下Docker部署单节点Kafka与部署可视化界面KafkaMap容器 目录 一、Kafka早已经弃用了ZooKeeper 二、Docker部署单机版Kafka 1、--name kafka-server 2、--network kafka-stand 3、--restart unless-stopped 4、-p 9092:9092 5、-p 9093:9093 6、-e ALLOW_PLAINTE…

Elasticsearch面试精讲 Day 2:索引、文档与映射机制

【Elasticsearch面试精讲 Day 2】索引、文档与映射机制 在“Elasticsearch面试精讲”系列的第二天&#xff0c;我们将深入探讨索引&#xff08;Index&#xff09;、文档&#xff08;Document&#xff09;与映射&#xff08;Mapping&#xff09;机制。这是Elasticsearch中最基础…

Vue2 与 Vue3 路由钩子的区别及用法详解

Vue2 与 Vue3 路由钩子的区别及用法详解 一、核心区别概览特性Vue2 (选项式API)Vue3 (组合式API)定义方式组件选项形式在setup()中调用函数形式钩子名称beforeRouteEnter/Update/LeaveonBeforeRouteUpdate/Leavethis访问beforeRouteEnter不能访问this无this概念&#xff0c;直接…

STM32的内存分配与堆栈

使用过cortex-M4内核单片机的朋友对下面这张图一定不会感到陌生&#xff0c;它是ST原厂手册里面的memory map&#xff0c;里面的信息量其实非常多&#xff0c;今天简单说明一部分。我们在编写stm32代码的时候最长使用的地址有两块&#xff0c;第一块是0x0000 0000~0x3FFF FFFF,…

OpenStack 03:创建实例

修改默认安全组 管理规则 添加规则 添加端口22规则 添加ping 规则 下载镜像文件 Get images — Virtual Machine Image Guide documentation https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2 …

企业级架构师综合能力项目案例一(各种组件集群搭建+SpringBoot整合)

架构图 用户请求 → Nginx → Spring Cloud Gateway → 微服务集群↓MySQL集群主从复制(ShardingSphere) Redis集群主从复制(Sentinel)ES集群 MongoDB集群(分片)RocketMQ集群 Seata分布式事务搭建集群 Nginx集群和配置┌─────────…

学习stm32 窗口看门狗

窗口看门狗1.WWDG简介窗口看门狗用于监测单片机程序运行时效是否精准&#xff0c;主要检测软件异常&#xff0c;一般用于需要精准检测程序运行时间的场合。不仅防止程序 “卡死不喂狗”&#xff0c;还能避免程序 “异常早喂狗”&#xff08;如死循环中误执行喂狗指令&#xff0…

Selenium 等待机制:编写稳定可靠的自动化脚本

一、为什么需要等待机制&#xff1f;网页是动态加载的&#xff0c;元素出现的时间不确定。如果脚本在元素还没加载完成时就尝试操作它&#xff0c;就会抛出 NoSuchElementException 异常。三种等待方式&#xff1a;强制等待&#xff1a;time.sleep() - 简单但低效隐式等待&…

蓓韵安禧活性叶酸独立包装防漏贴心设计

蓓韵安禧叶酸新升级 近期&#xff0c;蓓韵安禧在叶酸产品上进行了重要的优化升级。这次升级的核心在于产品形态和使用体验的显著提升&#xff0c;尤其体现在其包装设计上。新版本采用了独立密封的小包装形式&#xff0c;每一份都精准包含每日所需的叶酸量。这种设计不仅有效避免…

8针脚的1.8寸IIC接口的TFT彩屏的八个引脚都需要使用吗?

核心结论 不需要全部使用8个引脚。实际仅需连接 4根核心线&#xff08;GND, VCC, SCL, SDA&#xff09; 即可基本工作&#xff0c;其余引脚为功能增强或备用设计。具体需根据屏幕型号确认&#xff0c;但通用规则如下&#xff1a;8针脚功能分解引脚标号典型名称是否必需作用不连…