Java中栈和队列的用法

栈的实现

使用Java的集合类Stack

  1. boolean isEmpty();//判断当前栈是否为空,等价于empty();
  2. synchronized E peek();//获得当前栈顶元素
  3. Synchronized E pop();//获得当前栈顶元素并删除
  4. E push(E object);//将元素加入栈顶
  5. 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的双向链表,也可以当作堆栈、队列、双端队列来使用

  1. 栈方法:push(e); 等效方法:addFirst(e);//向栈顶添加元素
  2. 栈方法:pop(); 等效方法:removeFirst();//获得当前栈顶元素,并删除
  3. 栈方法: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时,尽量避免使用Collectionadd()remove()方法,因为add()remove()方法在失败时会抛出异常;要使用offer()来加入元素,使用poll()来获取并删除元素,可以通过返回值判断成与否。

队列定义:Queue<E> queue=new LinkedList<E>();

  1. 队列方法:offer(e); 等效方法:offer(e) / offerLast(e);//向队尾添加元素
  2. 队列方法:poll(e); 等效方法:poll(e) / pollFirst(e);//获取队首元素并删除
  3. 队列方法: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相关推荐

  1. 20200927:Java和Cpp中栈与队列的区别

    Java和Cpp中栈与队列的区别 题目 思路与算法 代码实现 对比分析两种语言中栈和队列的区别 题目 1.225. 用队列实现栈 2.232. 用栈实现队列 3.155. 最小栈 思路与算法 三道简单 ...

  2. Java中的常用队列

    目录 一.队列的理解 二.Java中队列简述 2.1 Queue队列 2.2 双端队列 2.3 阻塞队列 2.4 非阻塞队列 三.各队列的区别与联系 一.队列的理解 队列是一种由数组和链表作为底层构造 ...

  3. Java中final的三种用法

    在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...

  4. Java中的final,finalized,finally用法

    Java中的final,finalized,finally用法 final: final可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或 ...

  5. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  6. Java中PreparedStatement和Statement的用法区别

    Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Sta ...

  7. Java中static的含义和用法

    Java中static的含义和用法 static:静态的,用于修饰成员(成员变量,成员方法); 1.被static所修饰的变量或者方法会储存在数据共享区; 2.被static修饰后的成员变量只有一份! ...

  8. java drawstring字体大小,JAVA中,drawstring 方法的用法,格式是什么啊

    啦啦啦额68的回答 Java中Graphics类的drawString()方法: i)drawString(String str,int x,int y): String str是可以在屏幕上显示的字 ...

  9. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

最新文章

  1. JS题目总结:原型链/new/json/MVC/Promise
  2. java基础学习(一)方法
  3. 《Linux Device Drivers》第十五章 内存映射和DMA——note
  4. 锐浪报表数据源access_kylin+SuperSet实现实时大数据报表的快速开发
  5. 微信/聊天宝/马桶MT/多闪 社交APP一个不落 被约谈!
  6. openerp 常见问题 OpenERP在哪储存附件?(转载)
  7. python类中的self参数和cls参数
  8. proteus常用器件
  9. android通过经纬度获取地址,android之location 根据接口获取经纬度信息
  10. linux下find搜索jpg格式图片,Linux文件查找命令-find
  11. 山水功放与音箱接线图_功放音响线接法图解
  12. 树莓派能跑matlab,Matlab树莓派硬件支持平台的搭建
  13. matlab 单相整流电路,基于MATLAB的单相桥式整流电路研究
  14. PS制作透明图片png格式
  15. VMware三种网络模式配置详解。
  16. K3 CLOUD计划管理之计划方案(MPS/MRP)
  17. 微服务架构深度解析与最佳实践
  18. android.view.ContextThemeWrapper cannot be cast to android.app.Activity
  19. 机器学习经典算法总结之线性回归
  20. UWB高精度室内定位系统项目案例

热门文章

  1. Beta 冲刺(1/7)
  2. 软工实践——团队作业需求规格说明书——原型UI设计
  3. 【转】Java内存与垃圾回收调优
  4. 使用 VS2005 编译 directshow sample 时链接错误
  5. D - 小Y上学记——要迟到了!
  6. AutoIT 实现Firefox下载
  7. YII框架开发一个项目的通用目录结构:
  8. 打印机可以打印不能扫描怎么弄_为什么打印机可以通过电脑打印可不能扫描呢...
  9. Spring快速入门及深入
  10. 远程连接云服务器的MySQL数据库