一、Queue接口的描述
Queue接口,实现了 Collection接口。
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
在Queue中,有 offer、add、poll、remove、peek、element六个方法
public interface Queue<E> extends Collection<E> {
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
}
二、offer/add函数,poll/remove函数,peek/element函数的区别
1、offer函数和add函数的区别
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
2、poll函数和remove函数的区别
remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似
但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
3、peek函数和element函数的区别
element() 和 peek() 用于在队列的头部查询元素。
与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
二、Deque接口的描述
Deque接口继承了Queue接口。官方文档推荐用Deque实现栈(stack)。
Deque<E> stack = new LinkedList<E>();
线性集合,支持两端的元素插入和移除。Deque是double ended queue
的简称,习惯上称之为双端队列。大多数Deque 实现对它们可能包含的元素的数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deque。
public interface Deque<E> extends Queue<E> {
//移除第一个出现对象o的元素
boolean removeFirstOccurrence(Object o);
//移除最后一个出现对象o的元素
boolean removeLastOccurrence(Object o);
//返回逆序迭代器
Iterator<E> descendingIterator();
//用作栈
void push(E e);
E pop();
//跟Queue一样的增删和判断是否有元素的方法
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();
//继承Queue的方法
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
//继承Collection的方法
boolean remove(Object o);
boolean contains(Object o);
public int size();
//继承Iterable的方法
Iterator<E> iterator();
}
- addFirst(): 向队头插入元素,如果元素为空,则发生NPE(空指针异常)
- addLast(): 向队尾插入元素,如果为空,则发生NPE
- offerFirst(): 向队头插入元素,如果插入成功返回true,否则返回false
- offerLast(): 向队尾插入元素,如果插入成功返回true,否则返回false
- removeFirst(): 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException
- removeLast(): 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException
- pollFirst(): 返回并移除队头元素,如果队列无元素,则返回null
- pollLast(): 返回并移除队尾元素,如果队列无元素,则返回null
- getFirst(): 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException
- getLast(): 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException
- peekFirst(): 获取队头元素但不移除,如果队列无元素,则返回null
- peekLast(): 获取队尾元素但不移除,如果队列无元素,则返回null
- pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
- push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException