API中對隊列的說明:
public interface Queue<E>extends Collection<E>
在處理元素前用於保存元素的collection。除了基本的Collection 操作外,隊列還提供其他的插入、提取和檢查操作。每個方法都存在兩種形式:一種拋出異常(操作失敗時),另一種返回一個特殊值(null 或false,具體取決於操作)。插入操作的後一種形式是用於專門為有容量限制的Queue 實現設計的;在大多數實現中,插入操作不會失敗。
隊列通常(但並非一定)以FIFO(先進先出)的方式排序各個元素。不過優先級隊列和LIFO 隊列(或堆棧)例外,前者根據提供的比較器或元素的自然順序對元素進行排序,後者按LIFO(後進先出)的方式對元素進行排序。無論使用哪種排序方式,隊列的頭都是調用remove() 或poll() 所移除的元素。在FIFO 隊列中,所有的新元素都插入隊列的末尾。其他種類的隊列可能使用不同的元素放置規則。每個Queue 實現必須指定其順序屬性。
如果可能,offer 方法可插入一個元素,否則返回false。這與Collection.add 方法不同,該方法只能通過拋出未經檢查的異常使添加元素失敗。 offer 方法設計用於正常的失敗情況,而不是出現異常的情況,例如在容量固定(有界)的隊列中。
remove() 和poll() 方法可移除和返回隊列的頭。到底從隊列中移除哪個元素是隊列排序策略的功能,而該策略在各種實現中是不同的。 remove() 和poll() 方法僅在隊列為空時其行為有所不同:remove() 方法拋出一個異常,而poll() 方法則返回null。
element() 和peek() 返回,但不移除,隊列的頭。
Queue 接口並未定義阻塞隊列的方法,而這在並發編程中是很常見的。 BlockingQueue 接口定義了那些等待元素出現或等待隊列中有可用空間的方法,這些方法擴展了此接口。
Queue 實現通常不允許插入null 元素,儘管某些實現(如LinkedList)並不禁止插入null。即使在允許null 的實現中,也不應該將null 插入到Queue 中,因為null 也用作poll 方法的一個特殊返回值,表明隊列不包含元素。
Queue 實現通常未定義equals 和hashCode 方法的基於元素的版本,而是從Object 類繼承了基於身份的版本,因為對於具有相同元素但有不同排序屬性的隊列而言,基於元素的相等性並非總是定義良好的。
在java裡使用隊列可以用LinkedList集合進行模擬
方法使用LinkedList集合,並使用其中的addLast、removeFirst、isEmpty等API集體模擬隊列操作
入隊列
void addLast(E e); // 將元素插入此列表的結尾
出隊列
E removeFirst(); // 移除並返回列表的第一個元素
判空
boolean isEmpty(); // 判斷隊列是否為空
示例代碼
package coreJavaOne; import java.util.LinkedList; import java.util.NoSuchElementException; public class SimulateQueue { private LinkedList<Integer> queue = new LinkedList<Integer>(); public boolean isEmpty() { return this.queue.isEmpty() ; } public void enQueue(int data) { this.queue.addLast(data); } public int deQueue() throws NoSuchElementException { return this.queue.removeFirst(); } public static void main(String[] args) { SimulateQueue q = new SimulateQueue(); q.enQueue(1); q.enQueue(2); q.enQueue(3); while (! q.isEmpty()) { int data = q.deQueue(); System.out .println(data); } } }