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);
}
}
}
