剛才看見群裡的一個朋友在問佇列的使用,確實在現實的寫程式碼中非常少使用佇列的,反正我是從來沒使用過。僅僅是學資料結構的時候學過。
以下是我寫的一個小樣例,希望有不足之處請提出改正。O(∩_∩)O~
看程式碼:
import java.util.LinkedList; import java.util.Queue; public class TestQueue { /** * @param args * @author JavaAlpha * Info 測試佇列 */ public static void main(String[] args) { Queue<String> queue = new LinkedList<String>(); queue.offer("1");//插入一個元素 queue.offer("2"); queue.offer("3"); //列印元素個數 System.out.println("queue.size()"+queue.size()); //遍歷列印全部的元素,安裝插入是順序列印 for (String string : queue) { System.out.println(string); } } } 列印內容: queue.size()3 1 2 3
以下是API中對佇列的說明:
public interface Queue<E>extends Collection<E>
在處理元素前用於儲存元素的 collection。除了主要的 Collection
操作外,佇列還提供其它的插入、提取和檢查操作。每一個方法都存在兩種形式:一種丟擲異常(操作失敗時),還有一種返回一個特殊值(null 或 false,詳細取決於操作)。插入操作的後一種形式是用於專門為有容量限制的 Queue 實現設計的;在大多數實現中,插入操作不會失敗。
丟擲異常 | 返回特殊值 | |
插入 | add(e) |
offer(e) |
移除 | remove() |
poll() |
檢查 | element() |
peek() |
佇列通常(但並不是一定)以 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 類繼承了基於身份的版本號,由於對於具有同樣元素但有不同排序屬性的佇列而言,基於元素的相等性並不是總是定義良好的。