一、Queue是一个interface。
特点是:FIFO(first in first out)先进先出
出队入队:O(1)
查找:O(n)
Queue提供两套接口。
1、add(E):队满时增加元素会抛出异常
remove():队空时会抛出异常
element():队空时会抛出异常
2、offer(E):队满时,会返回false
poll:对空时,返回null。(队列中不允许放入null值,会和poll对空发生歧义,尽管描写具体实现可以放置null值)
peek:对空时,返回null
Queue的非阻塞的一个接口是Deque。LinkedList、ArrayDeque、PriorityQueue等都实现了Queue的功能。
Deque是双端队列的接口,在Queue的基础上又提供了:addFirst、addLast、removeFirst、removeLast、getFirst、getLast;offerFirst、offerLast、pollFirst、pollLast、peekFirst、peekLast等两套抛异常和不抛异常的接口。
一般建议使用:ArrayDeque和LinkedList两个实现类来实现队栈。
二、BlockingQueue继承Queue,是其他阻塞队列的父类
public interface BlockingQueue extends Queue
比如:BlockingDeque、ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue、PriorityBlockingQueue等的父类
BlockingQueue在上述接口的基础上又提供两套接口:
3、put(E):队满时阻塞,直到队列存在容量时加入
offer(E, timeout,timeunit):队满则等待最长timeout时间,失败则false,成功返回true
4、take():队空时阻塞,直到队列存在数据时返回数据
poll(timeout,timeunit):对空时等待最长timeout时间,失败则null,成功返回数据
BlockingQueue是BlockingDeque、ArrayBlockingQueue、LinkedBlockingQueue等的父类