Java Queue 和 Deque队列

来源:互联网 发布:手机qq2010 java版 编辑:程序博客网 时间:2024/05/21 06:53

Queue 队列 与 Deque 队列

分类 :

  • 单向队列 Queue : 一端操作
    • 一般FIFO
    • 优先队列 和 堆栈(LIFO);
   抛出异常 返回特殊值 插入 add(e) offer(e) 移除 remove() poll() 获取 element() peek()

代码如下 :模拟银行的存储业务

package club.dohacker.Test;import java.util.ArrayDeque;import java.util.Queue;public class Test1 {    public static void main(String[] args) {        //创建一个队列 : 使用的是queue来接收 , 虽然可能子类有双向队列的方法,但是依旧只能用单向队列的方法        Queue<Request> queue = new ArrayDeque<Request>();        //开始向队列中添加元素        for(int i=0;i<10;i++){            final int a = i;             queue.add(new Request("第"+a+"个人",(int)(Math.random()*100000)));         }        //显示队列里面的元素        Test1.displayQueue(queue);    } /**  * 显示队列中的所有元素  * @param queue  */ public static void displayQueue(Queue<Request> queue){     Request temp = null;      while((temp = queue.poll())!=null){          System.out.println(temp.toString());     } }}class Request{    private String name;    private double mony;    public Request(String name,double mony){        this.name = name;        this.mony = mony;    }    public String toString(){        return "姓名 : "+this.name+"   存款 :"+this.mony;    }}

  • 双向队列 Deque : 两端操作
    方法如下 :
操作 第一个元素 最后一个元素 抛出异常 特殊值 抛出异常 特殊值 插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e) push(e) add(e) offer(e) 移除 removeFirst() pollFirst() removeLast() pollLast() remove()/po poll() 获取 getFirst() peekFirst() getLast() peekLast() element() peek()



代码如下

package club.dohacker.Test;import java.util.ArrayDeque;import java.util.Deque;/** * 使用双向队列 *  * @author Administrator * */public class Test2 {    public static void main(String[] args) {       Deque<String> de = new ArrayDeque<String>();       //向队列中添加元素       de.offerFirst("张三");       de.offerFirst("李四");       de.push("王五");       //开始获取队列中的元素       System.out.println(de.pollFirst());       System.out.println(de.pollFirst());       System.out.println(de.pollFirst());    }}

使用双向队列模仿栈

代码如下

package club.dohacker.Test;import java.util.ArrayDeque;import java.util.Deque;/** * 使用双向队列 *  * @author Administrator * */public class Test2 {    public static void main(String[] args) {       Stack<String> stack = new Stack<String>(3);       stack.push("asd");       stack.push("asdasd");       stack.push("asdasdasd");       stack.push("asdasdasdasdasd");       System.out.println(stack.getSize());      String temp = null;       while((temp = stack.pop())!=null){           System.out.println(temp);       }    }}class Stack<T>{    //容纳数据元素的容器    private Deque<T> de = new ArrayDeque<T>();    private int capatity;   //表示容器的大小    //默认构造    public Stack(){       this(10); //默认的栈结构大小是10      }    //构造    public Stack(int capacity){        this.capatity =capacity;    }    /**     * 压栈     * @param e     * @return boolean      */    public boolean push(T e){        if(this.de.size() >=this.capatity){             return false;        }        this.de.offerFirst(e);        return true;    }    /**      * 弹栈 :     * @return     */    public T pop(){        if(this.de.size() == 0 ){            return null;        }        return de.pollFirst();    }    /**     * 获取栈的元素     * @return     */    public T getTop(){        if(this.de.size() == 0 ){            return null;        }        return de.peekFirst();    }    public int getSize(){        return this.de.size();    }}
原创粉丝点击