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 ...
随机推荐
- DP-DAY3游记
问题 A: 2017夏令营第一阶段(Day3)问题A拆分数字I 题目描述 把数字N拆分一些正整数的和,问有多少种不同的方法? 例如:N=4,有1+1+1+1.1+1+2.1+2+1.1+3.2+ ...
- 免杀shellcode并绕过杀毒添加自启动
https://www.wtfsec.org/posts/%E5%85%8D%E6%9D%80shellcode%E5%B9%B6%E7%BB%95%E8%BF%87%E6%9D%80%E6%AF%9 ...
- SpringBoot从入门到精通教程(八)
本主要介绍ElasticSearch 和 SpringBoot 的整合 ,对您有帮助的话,点个关注哦 ElastSearch 介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供 ...
- 【Java】Java Win10环境搭建--JDK、Eclipse
win10安装Java JDK环境及Eclipse安装使用(Hello world) win10环境下安装Java环境,对于小白来说简直是头疼,因为Java内部环境有着JDK和JRE两块,互相牵扯着很 ...
- 同学你会hello world吗? 给我讲清楚点
少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 面试官超级喜欢问hello ...
- PHP简单的计算位数的函数
一个简单的PHP计算位数的函数: 1 <?php 2 //一个简单的计算字符串有长度的函数 3 #开始定义函数 4 function count_digit($number){ 5 $count ...
- C# AutoMapper:流行的对象映射框架,可减少大量硬编码,很小巧灵活,性能表现也可接受。
AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象. 官网地址:http://automapper.org/ 官方文档:https://docs.automapper.org ...
- 1.自定义view入门
1.继承自view 系统提供的view 如 TextView .ImageView 都是继承自view的: 2.自定义一个TextView 通过自定义一个TextView 来熟悉继承自view 的自定 ...
- rtmp向IR601移植过程(无功能步骤,只有移植步骤)
1.main.c中添加头文件: #include "rtmp_sys.h" #include "log.h" #include "rtmp.h&quo ...
- .NETCore使用EntityFrameworkCore连接数据库生成实体
EF Core 通过数据库提供程序插件模型与 SQL Server/SQL Azure.SQLite.Azure Cosmos DB.MySQL.PostgreSQL 和更多数据库配合使用. 使用EF ...