Java 栈的使用
讲栈之前,要先讲一下Deque双端队列
- 既可以添加到队尾,也可以添加到队首
- 既可以从队首获取又可以从队尾获取
public interface Deque<E> extends Queue<E> {
}
我们可以看到Deque其实是扩展至Queue接口的
我们对比一下Deque和Queue的方法
| Queue | Deque | |
|---|---|---|
| 添加元素到队尾 | add(E e) / off(E e) | addLast(E e) / offerLast(E e) |
| 取队首元素并删除 | E remove() / E poll() | E removeFirst() / E pollFirst() |
| 取队首元素但不删除 | E element() / E peek() | E getFirst() / E peekFirst() |
Deque还有自己的方法
| Deque | |
|---|---|
| 添加元素到队首 | addFirst(E e) / offerFirst() |
| 取队尾元素并删除 | E removeLast() / E pollLast() |
| 取队尾元素但不删除 | E getLast() / E peekLast() |
Deque的实现类: ArrayDeque , LinkedList
Deque<Object> deque = new LinkedList<>();
deque.offerLast("end");
deque.offerFirst("3");
deque.offerFirst("2");
deque.offerFirst("1");
while (deque.size() > 0) {
System.out.println(deque.pollFirst());
}
运行结果
1
2
3
end
栈(Stack)是一种后进先出的数据结构

先进去的元素永远都在栈顶,所有它最后才会出来
有两个重要的方法
- push(E e):把元素压栈
- pop(E e): 把栈顶的元素“弹出”
用Deque可以实现Stack的功能
- push(E e) : addFirst(E e)
- pop() : removeFirst()
- peek() : peekFirst()
Java使用Deque实现栈的功能,注意只调用push / pop /peek,避免调用Deque的其它方法
不要使用遗留类Stack
Java 栈的使用的更多相关文章
- 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈
最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...
- java栈内存堆内存和GC相关
java栈内存堆内存 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存,有着不同的作用.栈内存用来存储局部变量和方法调用.栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属 ...
- JAVA栈帧
简介 Java栈是一块线程私有的内存空间.java堆和程序数据相关,java栈就是和线程执行密切相关的,线程的执行的基本行为是函数调用,每次函数调用的数据都是通过java栈来传递的. Java栈与数据 ...
- java虚拟机 jvm 出入java栈 栈空间内存分配
java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中 ...
- java虚拟机 jvm java堆 方法区 java栈
java堆是java应用程序最密切的内存空间.几乎所有的对象都存在堆中.java堆完全自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要显式释放. 根据java垃圾回收机制的不同,java堆可能 ...
- java 栈 最大深度
1. 概述 某公司面试,总监大叔过来,问了图论及栈的最大深度,然后^_^ 一直记着,今天搞一下 2. 代码 package com.goodfan.test; public class JavaS ...
- 【多线程】死锁与Java栈跟踪工具
今天面试有一道题,写一个死锁的程序,自己也是短路了,没写出来,回来写下. 死锁常见的情况是A线程持有a锁.阻塞于b锁,B线程持有b锁,阻塞于a锁,形成一个循环阻塞的状态. import java.ut ...
- java栈的最大深度?
1. 概述 某公司面试,总监大叔过来,问了图论及栈的最大深度,然后^_^ 一直记着,今天搞一下 2. 代码 package com.goodfan.test; public class JavaSta ...
- JVM(1)之 JAVA栈
开发十年,就只剩下这套架构体系了! >>> 若想使自己编写的Java程序高效运行,以及进行正确.高效的异常诊断,JVM是不得不谈的一个话题.本"JVM进阶"专 ...
- Java栈的实例模拟
前言: “后进先出”---是栈(Stack)这种数据结构最基本的特点.很多程序设计语言都具有封装好的Stack工具,本文就带领大家一起将栈温习一下并附上一个模拟栈的程序. Java内存分配中,每通过n ...
随机推荐
- jQuery的事件机制和其他知识
jQuery 设置宽度和高度 宽度操作: $(selector).height(); //不带参数表示获取高度 $(selector).height(200); //带参数表示设置高度 宽度操作: ...
- [打基础]一些C++自带的库(持续更新)
iomanip manip是manipulator(嗯,操作器?)的缩写,对应头文件就是 #include<iomanip> 在算法竞赛里用得到的应该是两个接口:进制转换(8,10,16) ...
- [日常摸鱼]UVA393 The Doors 简单计算几何+最短路
The Boy Next Doors 题意:给定一个固定大小的房间($x,y$的范围都是$[0,10]$),有$n$个墙壁作为障碍(都与横坐标轴垂直),每个墙壁都有两扇门分别用四个点来描述,起点 ...
- Python批量创建word文档(1)- 纯文字
Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...
- 【进程/作业管理】篇章一:Linux进程及其管理(系统监控类工具)----glances、dstat
glances dstat glances命令详解 相对于htop工具的使用,这里介绍一下glances工具的使用,我个人是比较喜欢这款工具的,主要就是由于glances这款工具可以将系统状态 ...
- 两千星 .NET5 框架 Furion 亮点分析(一)
让 .NET 开发更简单,更通用,更流行. Furion 介绍 Furion 是基于 .NET5 平台下打造的现代化 Web 框架.旨在 让 .NET 开发更简单,更通用,更流行.. Furion 非 ...
- mybatis-plus 自定义SQL,XML形式,传参的几种方式
mybatis-plus 自定义SQL,XML形式,传参的几种方式 前提说明 所涉及文件 传参类型说明 1.Java代码中使用QueryWrapper动态拼装SQL 2.简单类型参数(如String, ...
- golang unsafe.Pointer与uintptr
原文地址:https://blog.fanscore.cn/p/33/ 先说结论 uintptr 是一个地址数值,它不是指针,与地址上的对象没有引用关系,垃圾回收器不会因为有一个uintptr类型的值 ...
- mysql8.0.19压缩版安装
1.官网下载.zip格式的MySQL Server的压缩包,选择x86或x64版,并解压. 2. 创建 data文件夹 及 my.ini文件,并编辑 [mysqld] # 设置为自己MYSQL的安装目 ...
- (转) 增加 header 参数,spring boot + swagger2(springfox)
1 @Configuration 2 @EnableSwagger2 3 public class Swagger2 { 4 @Bean 5 public Docket createRestApi() ...