Queue队列接口
先进后出,只能一头进,另一头出
public interface Queue<E> extends Collection<E> {
//在队尾添加一个元素
boolean add(E e);
boolean offer(E e);
//从队首弹出一个元素
E remove();
E poll();
//检索队首元素
E element();
E peek();
}
- add、remove、element在遇到容量限制时会抛异常
- offer、poll、peek不会抛异常,offer在添加失败时会返回false,poll和peek在没有元素时会返回null
- 所以尽量不要在队列(包括下面的双端队列)中插入null元素,因为poll和peek方法在没有元素时也会返回null,代码可能会产生歧义
Deque双端队列接口
两头都可以进出
public interface Deque<E> extends Queue<E> {
//在队首添加一个元素
void addFirst(E e);
boolean offerFirst(E e);
//在队尾添加一个元素
void addLast(E e);
boolean offerLast(E e);
//删除队首元素
E removeFirst();
E pollFirst();
//删除队尾元素
E removeLast();
E pollLast();
//检索队首元素
E getFirst();
E peekFirst();
//检索队尾元素
E getLast();
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);
Iterator<E> iterator();
Iterator<E> descendingIterator(); //倒序迭代器
}
双端队列对于普通队列多出了队尾的方法。
LinkedList实现了Deque接口,具体可以参考LinkedList的实现。
注意LinkedList是没有容量限制的,所以add与offer实际上的效果是一样的,不会抛出异常。
PS:先了解了队列的接口意义,再去看队列的实现会更容易理解。
网友评论