Java中栈和队列的用法 Stack And Queue
Java中栈和队列的用法
栈的实现
使用Java的集合类Stack
boolean isEmpty();
//判断当前栈是否为空,等价于empty();synchronized E peek();
//获得当前栈顶元素Synchronized E pop();
//获得当前栈顶元素并删除E push(E object);
//将元素加入栈顶Synchronized int search(Object o);
//查找元素在栈中的位置,由栈底向栈顶方向数
import java.util.Stack;
public class Solution{public static void main(String[] args){Stack<Integer> sk=new Stack<Integer>();System.out.println(sk.isEmpty());//判断栈是否为空,truefor(int i=0;i<10;i++){int e=sk.push(i+20);//将元素加入栈顶,并返回栈顶元素System.out.println(i+": "+e);}System.out.println(sk.empty());//判断栈是否为空,falseSystem.out.println(sk.pop());//返回栈顶元素,并删除System.out.println(sk.peek());//返回当前栈顶元素System.out.println("first:"+sk.search(20));//查找栈中元素的位置System.out.println("last:"+sk.search(29));}
}
借用LinkedList来间接实现Stack
LinkedList
是一个继承于AbstractSequentialList
的双向链表,也可以当作堆栈、队列、双端队列来使用
- 栈方法:
push(e);
等效方法:addFirst(e);
//向栈顶添加元素 - 栈方法:
pop();
等效方法:removeFirst();
//获得当前栈顶元素,并删除 - 栈方法:
peek();
等效方法:peekFirst();
//获得当前栈顶元素
import java.util.LinkedList;
import java.util.Stack;
public class Solution{public static void main(String[] args){LinkedList<Integer> sk=new LinkedList<Integer>();System.out.println(sk.isEmpty());//判断是否为空,true//System.out.println(sk.empty());错误,没有这个方法for(int i=0;i<10;i++){//int e=sk.addFirst(i+20);错误,没有返回值sk.addFirst(i+20);//向栈顶添加元素System.out.println(i+": "+(i+20));}System.out.println("peekFirst:"+sk.peekFirst());System.out.println("removeFirst:"+sk.removeFirst());//获得栈顶元素并删除System.out.println("peekFirst:"+sk.peekFirst());//获得栈顶元素}
}
队列的实现
Java中虽然有Queue
接口 ,但并没有给出队列的实现类,而LinkedList
实现了Queue
接口。因为LinkedList
是双向链表,所以很方便的实现队列的所有功能。使用Queue
时,尽量避免使用Collection
的add()
和remove()
方法,因为add()
和remove()
方法在失败时会抛出异常;要使用offer()
来加入元素,使用poll()
来获取并删除元素,可以通过返回值判断成与否。
队列定义:Queue<E> queue=new LinkedList<E>();
- 队列方法:
offer(e);
等效方法:offer(e)
/offerLast(e);
//向队尾添加元素 - 队列方法:
poll(e);
等效方法:poll(e)
/pollFirst(e);
//获取队首元素并删除 - 队列方法:
peek(e);
等效方法:peek(e)
/peeFirst(e);
//向获取队首元素
- code 1
import java.util.LinkedList;
import java.util.Queue;
public class Solution{public static void main(String[] args){Queue<Integer> queue=new LinkedList<Integer>();System.out.println(queue.isEmpty());//判断是否为空,true//System.out.println(queue.empty());//错误,没有这个方法for(int i=0;i<10;i++){//int e=sk.addFirst(i+20);错误,没有返回值queue.offer(i+20);//向队尾添加元素System.out.println(i+": "+(i+20));}System.out.println("peekFirst:"+queue.peek());System.out.println("removeFirst:"+queue.poll());//获得队首元素并删除System.out.println("peekFirst:"+queue.peek());//获得队首元素}
}
- code 2
import java.util.LinkedList;
import java.util.Queue;
public class Solution{public static void main(String[] args){LinkedList<Integer> queue=new LinkedList<Integer>();System.out.println(queue.isEmpty());//判断是否为空,true//System.out.println(queue.empty());//错误,没有这个方法for(int i=0;i<10;i++){//int e=sk.addFirst(i+20);错误,没有返回值queue.offer(i+20);//向队尾添加元素System.out.println(i+": "+(i+20));}System.out.println("peekFirst:"+queue.peek());System.out.println("removeFirst:"+queue.poll());//获得队首元素并删除System.out.println("peekFirst:"+queue.peek());//获得队首元素}
}
- code 3
import java.util.LinkedList;
import java.util.Queue;
public class Solution{public static void main(String[] args){LinkedList<Integer> queue=new LinkedList<Integer>();System.out.println(queue.isEmpty());//判断是否为空,true//System.out.println(queue.empty());//错误,没有这个方法for(int i=0;i<10;i++){//int e=sk.addFirst(i+20);错误,没有返回值queue.offerLast(i+20);//向队尾添加元素System.out.println(i+": "+(i+20));}System.out.println("peekFirst:"+queue.peekFirst());System.out.println("removeFirst:"+queue.pollFirst());//获得队首元素并删除System.out.println("peekFirst:"+queue.peekFirst());//获得队首元素}
}
Java中栈和队列的用法 Stack And Queue相关推荐
- 20200927:Java和Cpp中栈与队列的区别
Java和Cpp中栈与队列的区别 题目 思路与算法 代码实现 对比分析两种语言中栈和队列的区别 题目 1.225. 用队列实现栈 2.232. 用栈实现队列 3.155. 最小栈 思路与算法 三道简单 ...
- Java中的常用队列
目录 一.队列的理解 二.Java中队列简述 2.1 Queue队列 2.2 双端队列 2.3 阻塞队列 2.4 非阻塞队列 三.各队列的区别与联系 一.队列的理解 队列是一种由数组和链表作为底层构造 ...
- Java中final的三种用法
在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...
- Java中的final,finalized,finally用法
Java中的final,finalized,finally用法 final: final可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或 ...
- 【Java学习笔记之二十九】Java中的equals和==的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...
- Java中PreparedStatement和Statement的用法区别
Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈 1. PreparedStatement接口继承Sta ...
- Java中static的含义和用法
Java中static的含义和用法 static:静态的,用于修饰成员(成员变量,成员方法); 1.被static所修饰的变量或者方法会储存在数据共享区; 2.被static修饰后的成员变量只有一份! ...
- java drawstring字体大小,JAVA中,drawstring 方法的用法,格式是什么啊
啦啦啦额68的回答 Java中Graphics类的drawString()方法: i)drawString(String str,int x,int y): String str是可以在屏幕上显示的字 ...
- Java中BigDecimal类介绍及用法
Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...
最新文章
- JS题目总结:原型链/new/json/MVC/Promise
- java基础学习(一)方法
- 《Linux Device Drivers》第十五章 内存映射和DMA——note
- 锐浪报表数据源access_kylin+SuperSet实现实时大数据报表的快速开发
- 微信/聊天宝/马桶MT/多闪 社交APP一个不落 被约谈!
- openerp 常见问题 OpenERP在哪储存附件?(转载)
- python类中的self参数和cls参数
- proteus常用器件
- android通过经纬度获取地址,android之location 根据接口获取经纬度信息
- linux下find搜索jpg格式图片,Linux文件查找命令-find
- 山水功放与音箱接线图_功放音响线接法图解
- 树莓派能跑matlab,Matlab树莓派硬件支持平台的搭建
- matlab 单相整流电路,基于MATLAB的单相桥式整流电路研究
- PS制作透明图片png格式
- VMware三种网络模式配置详解。
- K3 CLOUD计划管理之计划方案(MPS/MRP)
- 微服务架构深度解析与最佳实践
- android.view.ContextThemeWrapper cannot be cast to android.app.Activity
- 机器学习经典算法总结之线性回归
- UWB高精度室内定位系统项目案例