Queue接口
隊列,除了基本的Collection操作之外,隊列還提供額外的插入,提取和檢查操作。 這些方法中的每一種都有兩種形式:如果操作失敗,則拋出一個異常,另一種形式返回一個特殊值( null或false ,具體取決於操作)。
通常(但不一定)是以FIFO(先進先出)方式排序元素
例外情況包括優先級隊列(根據提供的比較器對元素進行排序)和LIFO隊列(或堆棧)(後進先出)
類聲明
public interface Queue<E> extends Collection<E>
共性方法
/**
* 將指定元素插入到此隊列中
* IllegalStateException - 如果由於容量限制,此時無法添加該元素
* ClassCastException - 如果指定元素的類阻止將其添加到此隊列中
* NullPointerException - 如果指定的元素爲空,並且該隊列不允許空元素
* IllegalArgumentException - 如果此元素的某些屬性阻止將其添加到此隊列
*/
boolean add(E e);
/**
* 將指定元素插入到此隊列中,如果超出隊列界限則返回false
* ClassCastException - 如果指定元素的類阻止將其添加到此隊列中
* NullPointerException - 如果指定的元素爲空,並且該隊列不允許空元素
* IllegalArgumentException - 如果此元素的某些屬性阻止將其添加到此隊列
*/
boolean offer(E e);
/**
* 檢索並刪除此隊列的頭
* NoSuchElementException - 如果這個隊列是空的
*/
E remove();
/**
* 檢索並刪除此隊列的頭,如果此隊列爲空,則返回 null
*/
E poll();
/**
* 檢索但不刪除這個隊列的頭部
* NoSuchElementException - 如果這個隊列是空的
*/
E element();
/**
* 檢索但不刪除此隊列的頭部,如果此隊列爲空,則返回 null
*/
E peek();
AbstractQueue抽象類
類聲明
public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E>
方法實現
// 唯一的構造器 給子類初始化使用
protected AbstractQueue() {
}
// 調用offer
public boolean add(E e) {
if (offer(e))
return true;
else
throw new IllegalStateException("Queue full");
}
// 調用poll
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
// 調用peek
public E element() {
E x = peek();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
// 循環調用poll直至返回null
public void clear() {
while (poll() != null)
;
}
// 添加集合中的所有元素近隊列,如果在添加元素中遇到運行時異常會導致拋出異常時已成功添加了一部份
public boolean addAll(Collection<? extends E> c) {
if (c == null)
throw new NullPointerException();
if (c == this)
throw new IllegalArgumentException();
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
Deque接口
雙端隊列 (double ended queue),支持在兩端插入和移除元素
此接口支持容量受限的deque以及沒有固定大小限制的deque,大多數deque的實現對元素的數量沒有固定限制
類聲明
public interface Deque<E> extends Queue<E>
Queue 方法
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
相似行爲
當deque用作隊列時,FIFO(先進先出)行爲將產生。元素添加在deque的末尾,並從開頭刪除
void addLast(E e); // 等價於 boolean add(E e)
boolean offerLast(E e); // 等價於 boolean offer(E e)
E removeFirst(); // 等價於 E remove()
E pollFirst(); // 等價於 E poll()
E getFirst(); // 等價於 E element()
E peekFirst(); // 等價於 E peek()
Stack 方法
/**
* 將元素推送到由此deque表示的堆棧(換句話說,在此deque的頭部)
* IllegalStateException - 如果由於容量限制,此時無法添加該元素
* ClassCastException - 如果指定元素的類阻止將其添加到此deque
* NullPointerException - 如果指定的元素爲空,並且此deque不允許空元素
* IllegalArgumentException - 如果指定元素的某些屬性阻止將其添加到此deque
*/
void push(E e);
/**
* 從這個deque表示的堆棧中彈出一個元素(在此deque的頭部)
* NoSuchElementException - 如果這個deque是空的
*/
E pop();
相似行爲
當隊列用作的堆棧時,LIFO(後進先出)行爲將產生。元素從deque的開頭被推入和彈出
void addFirst(E e); // 等價於 void push(E e);
E removeFirst(); // 等價於 E pop();
E peekFirst(); // 等價於 E peek()
其他方法
// 隊頭插入元素,若不成功返null
boolean offerFirst(E e);
// 隊尾刪除並返回元素,若隊列爲空則拋異常
E removeLast();
// 隊尾刪除並返回元素,若隊列爲空則返null
E pollLast();
// 檢索隊尾元素,若隊列爲空則拋異常
E getLast();
// 檢索隊尾元素,若隊列爲空則返null
E peekLast();
// 從此deque中刪除指定元素的第一個匹配項
boolean removeFirstOccurrence(Object o);
// 從此deque中刪除指定元素的最後一個匹配項
boolean removeLastOccurrence(Object o);
// *** Collection methods ***
boolean remove(Object o);
boolean contains(Object o);
public int size();
Iterator<E> iterator();
// 以相反的順序返回deque中的迭代器
Iterator<E> descendingIterator();