队列中的Queue与Deque

来源:互联网 发布:男烟女烟区别知乎 编辑:程序博客网 时间:2024/05/25 19:59

队列分单向队列和双向队列,单向队列从一端操作使用Queue接口,双向队列从两端操作使用Deque接口。

Queue接口:  抛出异常的方法有add(),remove(),element()获取。

                           返回特殊值的方法:offer(),poll(),peek()。

Deque接口 : 从头操作与从尾操作,与Queue接口其实大同小异


下面我们首先用单向队列实现一个排队到银行存款的业务。

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

public class Demo01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //System.out.println("123");
      Queue<Request> que=new ArrayDeque<Request>();
      for(int i=1;i<=10;i++)
      {
          final int num=i;
          que.offer(new Request(){
           
            @Override
            public void dopost() {
                // TODO Auto-generated method stub
                System.out.println("第"+num+"个人,存款"+Math.random()*1000);
            }
              
          });
      }
      dealWith(que);
    }
    
    public static void dealWith(Queue<Request> que)
    {
        Request req=null;
        while(null!=(req=que.poll()))
        {
            req.dopost();
        }
    }
}

interface Request{
    
   void dopost();
}

这个例子有几点值得说一说:

1.匿名内部类只能引用final变量

2.Queue实现的对象的poll与offerfangfa

下面再来看一个用双向队列实现的堆栈,并用我们自己创建的堆栈类模拟下浏览记录的前进与后退

import java.util.ArrayDeque;
import java.util.Deque;

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

首先说说这个堆栈类,我们都知道堆栈和队列的区别在于它先进后出。其实堆栈的实现只需要关心3点,压栈,弹栈,获取头。

我们用一个测试类测了看看


public class Demo02 {

    public static void main(String[] args) {
        // TODO Auto-generated method stu
        MyStack<String> BackHistory=new MyStack<String>(3);
        BackHistory.push("baidu");
        BackHistory.push("baidu2");
        BackHistory.push("baidu3");
        BackHistory.push("baidu4");
        System.out.println(BackHistory.size());
        String item =null;
        while(null!=(item=BackHistory.pop()))
        {
            System.out.println(item);
        }
        

    }

}

可以发现其先进后出的特点,并且只能存3个


0 0
原创粉丝点击