Java集合之佇列

2021-08-20 19:44:21 字數 1131 閱讀 6033

jdk兩套佇列:

為什麼要使用阻塞佇列?

消費者和生產者不會保持相同的速度,如生產者快時候,佇列會越來越大,相比之下,阻塞佇列只允許生產者的速度在一定速度上超過消費者的速度,但不會超過很多。

linkedblockingqueue:

基於鍊錶的無界阻塞佇列,但也可以指定長度,不指定無界,內部維護了乙個鍊錶快取佇列,實現了讀寫分離(讀寫兩個鎖)

synchronousqueue:

沒有緩衝的佇列,生產者的資料直接被消費者消費,add方法必須在take方法之後呼叫,否則會拋異常,add只是將資料直接丟給阻塞等待的執行緒而並非直接向佇列裡新增資料

proritydueue:

基於優先順序的無阻塞佇列,(優先順序是通過建構函式傳入的compator物件來決定的)

delayqueue:

帶有延遲時間的無界阻塞佇列,其中的元素只有延遲時間到了才能從佇列中獲取資料,其中元素介面必須實現delayed介面,根據集合元素的getdalay()方法的返回值進行排序。底層基於priorityblockingqueue實現。

transferqueue:queue用於模擬佇列這種資料結構,佇列通常是先進先出的容器,新元素插入(offer)到佇列的尾部,訪問元素(poll)返回佇列的頭元素。queue介面有乙個priorityqueue實現類,除此之外還有乙個deque介面,而deque有arraydeque和linkedlist類實現,下面詳細講這幾個。

1、沒有實現的阻塞介面的linkedlist,內建的不阻塞佇列

2、 實現阻塞的介面

proritydueue儲存佇列的順序是按照佇列元素的大小進行重新排序,因此呼叫poll()方法取出佇列元素,不允許插入null元素

deque介面是queue介面的子介面,代表乙個雙端佇列,允許從兩邊操作佇列(可以當作棧來使用),pop(出棧),push(入棧)兩個方法

linkedlist也實現了deque介面,所以也可以當作棧來使用,兩者區別如下:

arraydeque內部是陣列形式來儲存集合的元素,隨機訪問時候效能較好,linkedlist內部是鍊錶形式,隨機訪問較差,但插入、刪除時候效能較好

java成神之 集合框架之佇列,棧,集合併發

棧 集合併發 結語此佇列第乙個元素永遠是最小的,先進先出 priorityqueuequeue new priorityqueue 雙端佇列 dequedequea new linkedlist dequea.add element 1 dequea.addfirst element 2 deque...

java學習筆記 集合之棧和佇列

棧是vector的乙個子類,它實現了乙個標準的後進先出的棧。堆疊只定義了預設建構函式,用來建立乙個空棧。堆疊除了包括由vector定義的所有方法,也定義了自己的一些方法。boolean empty 判斷棧是否為空 object peek 檢視堆疊頂部的物件,但不從堆疊中移除它。object pop ...

佇列之blah集合

做了乙個 上面的問題,叫 集合,以 為基數,則 和 都在集合中,且集合中全部元素都由此計算得來。問公升序排列後第 個元素是多少。以輸入示例 為例 集合中第乙個元素 基數 為 依次計算時會發現每 個資料會變為 個,這些數又會發生交叉。題目需要得到公升序後第 個,我們如果先計算再排序一定會超時的,所以我...