Java中的Queue和自定义堆栈
Queue:单向
- 队列通常 FIFO (先进先出)
- 优先级队列和堆栈 LIFO (后进先出)
package com.bjsxt.others.que; import java.util.ArrayDeque; import java.util.Queue; /** * 使用队列模拟银行存款业务 * @author Administrator * */ public class Demo01 { /** * @param args */ public static void main(String[] args) { Queue<Request> que =new ArrayDeque<Request>(); //模拟排队情况 for(int i=0;i<10;i++){ final int num =i; que.offer(new Request(){ //应用匿名内部类对象只能访问 final 修饰的变量 @Override public void deposit() { System.out.println("第"+num+"个人,办理存款业务,存款额度为:"+(Math.random()*10000)); } }); } dealWith(que); } //处理业务 public static void dealWith(Queue<Request> que){ Request req =null; while(null!=(req=que.poll())){ req.deposit(); } } } interface Request{ //存款 void deposit(); }
自定义堆栈
package com.bjsxt.others.que; import java.util.ArrayDeque; import java.util.Deque; /** * 使用队列实现自定义堆栈 * 1、弹 * 2、压 * 3、获取头 * @author Administrator * * @param <E> */ public class MyStack<E> { //容器 private Deque<E> container =new ArrayDeque<E>(); //容量 private int cap; public MyStack(int cap) { super(); this.cap = cap; } //压栈 public boolean push(E e){ if(container.size()+1>cap){ return false; } return container.offerLast(e); } //弹栈 public E pop(){ return container.pollLast(); } //获取 public E peek(){ return container.peekLast(); } public int size(){ return this.container.size(); } } package com.bjsxt.others.que; //测试自定义堆栈 public class Demo02 { /** * @param args */ public static void main(String[] args) { MyStack<String> backHistory =new MyStack<String>(3); backHistory.push("www.baidu.com"); backHistory.push("www.google.com"); backHistory.push("www.sina.com"); backHistory.push("www.bjsxt.cn"); System.out.println("大小:"+backHistory.size()); //遍历 String item=null; while(null!=(item=backHistory.pop())){ System.out.println(item); } } }