队列Queue这种数据结构,一般指先进先出(FIFO)这种容器。能够模拟生活中依次排队这种场景。安全
Queue和List同样都是Collection的子接口。数据结构
public interface Queue<E> extends Collection<E> { boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); }
Queue的实现有PriorityQueue、ArrayDeque、LinkedList。其中ArrayDeque、LinkedList是实现的其子接口Deque。性能
从上面的继承图能够清楚的看到,Deque是Queue的子接口,它不只是队列的数据结构,也是一个双端队列数据结构,同时也是一个栈(stack)的数据结构。线程
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(); E pollFirst(); E pollLast(); E getFirst(); E getLast(); E peekFirst(); E peekLast(); boolean removeFirstOccurrence(Object o); boolean removeLastOccurrence(Object o); // *** Queue methods *** boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); // *** Stack methods *** void push(E e); E pop(); // *** Collection methods *** boolean remove(Object o); boolean contains(Object o); public int size(); Iterator<E> iterator(); Iterator<E> descendingIterator(); }
Deque的接口和上面的Queue的操做基本相同。xxxFirst操做队列头部元素,xxxLast操做队列尾部元素。code
另外Deque能够表示一个栈(stack):具备后进先出(LIFO)的特征。blog
Java中还有一个Stack类,这个类继承Vector。继承
public class Stack<E> extends Vector<E> {
从源码中能够看到Stack的pop()和peek()方法都是被synchronized修饰的。所以Stack的栈是线程安全的,但也所以下降了栈的性能。因此当咱们不须要线程安全的场景时,应该用Deque.接口
public synchronized E peek() public synchronized E pop()