java 队列接口的设计

2018-09-01  本文已影响0人  萍水相逢_程序员

队列

队列一种特殊的线性表, 插入和删除操作分别在表的两端进行,特点是先进先出。把插入元素叫入队,这端叫对尾,删除元素叫出队,称为队尾。

java 队列接口的设计

Queue

public interface Queue<E> extends Collection<E>{
   
   // 添加一个元素 , 队列已满抛出异常 
   boolean add(E e);
   // 添加一个元素 , 队列已满抛返回false 
   boolean offer(E e);
   //移除并返回队列头部的元素,如果队列为空 则抛出异常
   E remove();
   //移除并返回队列头部的元素,如果队列为空返回null
   E poll();
   //返回队列头部的元素,如果队列为空 则抛出异常
   E element();
   //返回队列头部的元素,如果队列为空返回null
   E peek();
   
}

Deque

双向队列, 支持从两端点的检索 插入 删除元素
可以支持 先进先出, 先进后出的形式

    public interface Deque<E> extends Queue<E> {
        
        // 队列头添加一个元素 , 队列已满抛出异常 
        void addFirst(E e);
        
        // 队列尾添加一个元素 , 队列已满抛出异常 
        void addLast(E e);
        
        // 队列满  返回特殊值 
        boolean offerFirst(E e);
        
        // 队列满  返回特殊值 
        boolean offerLast(E e);
        
        //移除并返回队列头部的元素,如果队列为空 则抛出异常
         E removeFirst();
         
         //移除并返回队列尾部的元素,如果队列为空 则抛出异常
         E removeLast();
         
         //移除并返回队列头部的元素,如果队列为空返回null
         E pollFirst();
         
         //移除并返回队列头部的元素,如果队列为空返回null
         E pollLast();
         
         // Retrieves, but does not remove, the first element of this deque.  throws an exception if this deque is empty
         E getFirst();
         
         //Retrieves, but does not remove, the last element of this deque.  throws an exception if this deque is empty
         E getLast();
         
         // Retrieves, but does not remove, the first element of this deque. return {@code null} if this deque is empty
          E peekFirst();
          
          // Retrieves, but does not remove, the last element of this deque,    returns {@code null} if this deque is empty
          E peekLast();
           
           
    }

BlockingQueue

堵塞队列的设计
增加4个附加操作
1. 队列为空 增加获取元素线程被堵塞直到队列变为非空
2. 队列为满时 , 添加元素线程被堵塞直到队列不满
3. 在上述2种情况下,设计有限时间的堵塞。超时后返回失败

    public interface BlockingQueue<E> extends Queue<E> {
        
        boolean add(E e);
        boolean offer(E e);
        // 添加一个元素 , 队列已满则一直堵塞, 直到队列不满或者被中断
        void put(E e) throws InterruptedException;
        //添加一个元素,队列已满则进入等待 
        boolean offer(E e, long timeout, TimeUnit unit)throws InterruptedException;
        //返回队列头部的元素,如果队列为空,则堵塞
        E take() throws InterruptedException;
        // 返回队列头部的元素,如果队列为空,则等待
        E poll(long timeout, TimeUnit unit)throws InterruptedException;
        //一次性取走 BlockingQueue中的数据 到C中 
        int drainTo(Collection<? super E> c);
        //一次性取走 指定的BlockingQueue中的数据 到C中
        int drainTo(Collection<? super E> c, int maxElements);  
    }
上一篇下一篇

猜你喜欢

热点阅读