java堆栈类在哪个包里_Java堆栈Stack类的使用
栈的官方概念 栈是java存放内存的两种结构之一。栈是限定仅在表尾进行插入或删除操作的线形表。
通俗的讲,往栈里面存数据,就是先进后出。最先存入的数据在最底部,取出的时候最后被取出。可以理解为吃饱了就吐.
在Java里面根据栈的这种概念提供了一个Stack类和相关的方法,可以很容易的实现栈的这些特性。
下面是几个主要特性的方法:
isEmpty(): 测试堆栈是否为空。
search(): 返回指定对象在堆栈中的位置。
firstElement(): 查看堆栈中最底部的对象。
peek(): 查看堆栈中最顶部的对象。
pop(): 移除堆栈中最顶部的对象,并返回该对象。
通过代码简单测试一下这几个方法
package _3_5_test;
import java.util.Iterator;
import java.util.Stack;
public class SeventyThreeTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack stack = new Stack<>();
boolean flag1 = stack.isEmpty();
System.out.println("未添加数据前,对栈是否为空进行判断:"+flag1);
//向栈中存入数据
for(int i=0;i<10;i++) {
stack.push(i+1);
}
//查看栈中的所有对象
Iterator iterator = stack.iterator();
System.out.print("栈中所有对象:");
while (iterator.hasNext()) {
System.out.print(iterator.next()+" ");
}
System.out.println();
int index = stack.search(2);
System.out.println("返回对象2在栈中的位置:"+index);
int bottom = stack.firstElement();
System.out.println("查看栈底部的对象:"+bottom);
int peek1 = stack.peek();
System.out.println("查看栈顶部的对象(不从栈中移除):"+peek1);
int pop1 = stack.pop();
System.out.println("移除栈顶部的对象,并返回该对象:"+pop1);
int peek2 = stack.peek();
System.out.println("重新查看栈顶部的对象(不从栈中移除):"+peek2);
boolean flag2 = stack.isEmpty();
System.out.println("添加数据后,对栈是否为空进行判断:"+flag2);
}
}
实现效果
堆栈的实际应用
看概念不知道堆栈有什么用,做个题目就可以很直观的看出堆栈的作用了。
对表达式的计算是堆栈的经典应用
题目要求:
package _3_5_test;
import java.util.Scanner;
import java.util.Stack;
/*表达式计算
* 先分割表达式,根据运算符号进行分割
* 有乘除的先进行运算
* 有括号的先进行运算
* */
public class SeventyThree {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
Stack nums = new Stack(); // 保存数字
Stack opes = new Stack(); // 保存操作符
// 将字符串转换成字符数组,便于后面进行遍历操作
char cs[] = s.toCharArray();
// 用于存放数字
int n = 0;
// 遍历一遍字符串中所有的字符:分为以下几种情况进行处理
for (int i = 0; i < cs.length; i++) {
char temp = cs[i];
if (Character.isDigit(temp)) {// 如果当前的字符是数字,存入n中,要考虑大于10的数字的进位情况
n = n * 10 + Integer.parseInt(String.valueOf(temp));
} else {// 如果当前的字符不是数字,进行字符判断,区分是四则运算符号还是括号
if (n != 0) {// 如果n不等于0,说明已经取了运算符号左边的值,将这个值放进栈中
nums.push(n);
n = 0;
}
if (temp == '(') {// 如果当前字符是左括号,将字符存入栈中,再取下一个字符
opes.push(temp);
} else if (temp == ')') {// 计算括号中的内容
while (opes.peek() != '(') {
// 从数字栈和操作符栈取出顶部的值,进行运算,并将最终结果存进数字栈中
int t = cal(nums.pop(), nums.pop(), opes.pop());
nums.push(t);
}
opes.pop();//括号内运算完毕,取出左括号
} else if (pre(temp) > 0) {// 如果当前符号是四则运算符
if (opes.isEmpty()) {// 如果当前的符号栈中没有运算符号,则将当前的预算符号直接加进栈中
opes.push(temp);
} else {// 如果栈中已经存在的运算符号,则要进行优先级的判断
if (pre(opes.peek()) >= pre(temp)) {
int t = cal(nums.pop(), nums.pop(), opes.pop());
nums.push(t);
}
opes.push(temp);
}
}
}
}
if (n != 0) {
nums.push(n);
}
while (!opes.isEmpty()) {
int t = cal(nums.pop(), nums.pop(), opes.pop());
nums.push(t);
}
System.out.println(nums.pop());
}
// 自定义一个符号优先级判断方法
public static int pre(Character c) {
if (c == '+' || c == '-') {
return 1;
} else if (c == '*' || c == '/') {
return 2;
} else {
return 0;
}
}
// 自定义一个四则运算方法,因为栈先进后出的特性,所以b是在前面的数值,a是在后面的数值
public static int cal(int a, int b, Character sign) {
switch (sign) {
case '+':
return b + a;
case '-':
return b - a;
case '*':
return b * a;
case '/':
return b / a;
}
return 0;
}
}
java堆栈类在哪个包里_Java堆栈Stack类的使用相关推荐
- java中迭代器要导包吗_java 中迭代器的使用方法详解
java 中迭代器的使用方法详解 前言: 迭代器模式将一个集合给封装起来,主要是为用户提供了一种遍历其内部元素的方式.迭代器模式有两个优点:①提供给用户一个遍历的方式,而没有暴露其内部实现细节:②把元 ...
- java中random方法取值范围_java的Random类详解
Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要 ...
- php 类 单例,PHP里的单例类写法实例
PHP里的单实例类在进行数据交换,节省内存上还是很有意义的.写个简单例子. 类1,单实例类本身: class UTIL { private static $instance; public funct ...
- Java Spring初学者之调试器里括号包含的类含义
如图: 表示在执行类的构造函数. 圆括号里代表执行的构造函数是定义在哪个实际类里的: 从继承树可以看出,ClassPathXmlApplicationContext最终的父类为AbstractAppl ...
- java一个类添加多个接口_Java的一个类可以实现多个接口。
Java的一个类可以实现多个接口. 答:√ 下列原始凭证中属于一次凭证的有( ). 答: 收据 收料单 完全角化细胞在显微镜下不可能出现的颜色是 答:白色 In a language classroo ...
- java普通类方法的区别是什么_java – 普通接口类和只有抽象方法的抽象类之间有什么区别吗?...
是的,他们是不同的. 通过接口,客户端可以实现它以及扩展类: class ClientType implements YourInterface, SomeOtherInterface { //can ...
- java解析上的jar包里的pom_Maven引入本地Jar包并打包进War包中的方法
1.概述 在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来. 2. 拷贝至项目根目录 项目根目录即pom.xml文件所在的同级目录,可以 ...
- java时间往后延后一年_java中时间类(util Date)的后延与前推处理
当后延或者前推的天数在一定时间之内时,可以用以下方法处理 public static Date getValidEndTime(Date date,int validDayCount){ Simpl ...
- 工具类的方法怎么引用_Java实用工具类:File工具类方法学习,可创建目录及文件...
开发项目过程中,会用到很多工具类,今天分享一个Java中File操作工具类,可以帮你节约时间,提高开发效率. File工具类 public class CreateFileUtil { public ...
最新文章
- dfmea文件_PFMEA执行之步骤七:结果文件化 vs 高层管理者的承诺
- Android NDK开发Crash错误定位[转]
- Windows下运行jekyll,编码已不再是问题
- bzoj1051[kosaraju算法]求强连通分量
- Tomcat9版本不支持jsp处理PUT,DELETE之外的请求的解决方案(405方法不允许)
- 暴风影音2009开机启动关闭方法
- mysql1682错误_ERROR 1682 (HY000)
- java 数独算法_Java:递归数独解法计数算法
- 跟我学在高德地图——标注我的位置
- Hibernate框架基础——cascade属性
- 四.电影/综艺网站(包含搜索经验, 我的经验, 必看) 彻底帮你解决看电影/综艺的问题
- Openstack Zoning – Region/Availability Zone/Host Aggregate
- 如何识别液晶屏面板的型号及品牌
- 数据库查询中的n+1问题
- [转]作为黑客的你应该拥有的10个小工具
- DOM4j解析XMl中碰到的问题解决
- CC2640R2F的各个驱动文件放在哪里比较好
- geoip 注册_【注册】饲料添加剂巴基斯坦注册简介
- app式成语_abcc的成语c-abcc的成语c式词语大全app安卓版v12.12.2下载-SLY软件园
- 修改文件与文件提交--乐字节Java
热门文章
- 使用HttpClient发送WebService Security(WSS)请求
- 2020年Java实训项目【GUI学生信息管理系统】目录
- Java讲课笔记23:Map接口及其实现类
- string类比较大小_源码阅读String--JAVA成长之路
- 2017.3.5 yveh测试
- 【英语学习】【Level 07】U06 First Time L6 Not your typical experience
- 【英语学习】【WOTD】Parthian 释义/词源/示例
- linux下查看中断请求记录 IRQ
- UE4在VS2013中各个编译配置代表意义
- 安卓-08-布局管理器