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

}
经验分享 程序员 微信小程序 职场和发展