java基礎之佇列

2021-07-14 05:09:23 字數 1389 閱讀 3990

queue介面與list、set同一級別,都是繼承了collection介面。linkedlist實現了queue接 口。queue介面窄化了對linkedlist的方法的訪問許可權(即在方法中的引數型別如果是queue時,就完全只能訪問queue介面所定義的方法 了,而不能直接訪問 linkedlist的非queue的方法),以使得只有恰當的方法才可以使用。blockingqueue 繼承了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 方法的乙個特殊返回值,表明佇列不包含元素。

class blockingq 

return linkedlist.poll();}}

public

void

offer(object object)

linkedlist.add(object);}}

}

JAVA佇列之優先佇列

最近在專案開發中開發了全雙工非同步長連線的通訊元件,內部用到了延遲佇列。而延遲佇列的內部實現的儲存是用到了優先佇列,當時看c 的資料結構時,了解過優先佇列,用的儲存是二叉樹的邏輯,應該叫完全二叉樹,也可以叫做最大堆。下面看一下二叉樹的演算法,主要看插入和刪除。二叉樹顧名思義就像一棵樹,每個節點下最多...

Java集合之佇列

jdk兩套佇列 為什麼要使用阻塞佇列?消費者和生產者不會保持相同的速度,如生產者快時候,佇列會越來越大,相比之下,阻塞佇列只允許生產者的速度在一定速度上超過消費者的速度,但不會超過很多。linkedblockingqueue 基於鍊錶的無界阻塞佇列,但也可以指定長度,不指定無界,內部維護了乙個鍊錶快...

Java 實現佇列(一)之 鏈式佇列

佇列的定義和結構 佇列是一種特殊的線性表,其特性體現在佇列只允許在表尾插入資料元素,在表頭刪除元素,所以佇列是一種操作受限的線性表,具有先進先出的特點。允許進行插入的一端稱為隊尾,允許進行刪除的一端稱為隊首。佇列也分為順序和鏈式兩種儲存結構。定義介面 inte ce queue定義介面 class ...