单-双向队列

1 简图:



 

2 使用ArrayDeque队列模拟银行排队效果:

package Quene;

import java.util.ArrayDeque;
import java.util.Queue;

public class BackPosite {
	
	public static void main(String[] args) {
		
		Queue<Man> que = new ArrayDeque<Man>();
		for(int i=0; i<10; i++){
			final int num = i;
			que.offer(new Man(){ // 数据进入队列尾巴
				
				@Override
				public void deposit() {
					System.out.println("第" + num + "个人,办理存款业务,存款金额为: " + Math.random()*100 + "元");
				}
				
			});
		}
		
		dealWith(que);
	}

	private static void dealWith(Queue<Man> que) {
		Man man;
		while( (man = que.poll()) != null){ // 从队列头获取数值 并移除这个头对象 
			man.deposit();
		}
		
	}

}


interface Man {
	void deposit();
}

3 使用队列ArrayDeque 模拟堆栈效果:‘

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 {

	/**
	 * 结果:
	 * 大小:3
www.sina.com
www.google.com
www.baidu.com
	 */
	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.youku.cn");  // 定义堆栈为3长度 这里在添加添加不进去
		 
		System.out.println("大小:"+backHistory.size()); // 结果为3
		
		//遍历
		String item=null;
		while(null!=(item=backHistory.pop())){
			System.out.println(item);
		}
	}

}


猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2180820