標籤:
剛才看見群裡的一個朋友在問隊列的使用,確實在現實的寫代碼中非常少使用隊列的,反正我是從來沒使用過。僅僅是學資料結構的時候學過。
以下是我寫的一個小範例,希望有不足之處請提出改正。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()3123
以下是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 類繼承了基於身份的版本號碼,由於對於具有同樣元素但有不同排序屬性的隊列而言,基於元素的相等性並不是總是定義良好的。
Java 中隊列的使用