国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java中的Queue與Deque

zhangrxiang / 866人閱讀

摘要:最小初始化容量。它作為堆棧隊列雙端隊列的操作和的操作是一致的,只是內部的實現不同。根據元素內容查找和刪除的效率比較低,為。但是接口有對應的并發實現類類。

Queue接口的實現類

Queue接口作為隊列數據結構,java在實現的時候,直接定義了Deque接口(雙端隊列)來繼承Queue接口,并且只實現Deque接口。這樣java中的雙端隊列就囊括了隊列、雙端隊列、堆棧(Deque接口又定義了Stack的操作方法)這3種角色的功能。

所以我們在使用的時候直接使用的是Deque接口的實現類,當然Deque接口繼承自Queue接口。

Deque接口的實現類

我們記住,Deque接口所能代表的數據結構:隊列,雙端隊列,堆棧。

ArrayDeque

1.內部使用transient Object[] elements數組來實現。擁有head/tail這2個頭尾指針。最小初始化容量8。它還是一個循環隊列。

2.在擴容/初始化的時候,數組的內部大小一定是2個冪次方,也就是說大小只可能是:8、16、32、64這樣的倍增。

3.它作為堆棧、隊列、雙端隊列的操作和LinkedList的操作是一致的,只是內部的實現不同。當然,它們也有區別。

ArrayDeque實現了雙端隊列,內部使用循環數組實現,這決定了它有如下特點:

在兩端添加、刪除元素的效率很高,動態擴展需要的內存分配以及數組拷貝開銷可以被平攤,具體來說,添加N個元素的效率為O(N)。

根據元素內容查找和刪除的效率比較低,為O(N)。

與ArrayList和LinkedList不同,沒有索引位置的概念,不能根據索引位置進行操作(無法隨機訪問,這也符合隊列的性質)。

4.操作示例,要記住,Deque具有3種數據結構的特性,不同的數據結構應該使用不同的語義化方法!

LinkedList

LinkedList中在“List有序集合”這一篇文章中講過了,從隊列和雙端隊列的角度來看,LinkedList和ArrayDeque的方法聲明都是一致的。只不過LinkedList較之于ArrayDeque多實現了List接口,還具有有序集合List的特性。

ArrayDeque和LinkedList的比較

ArrayDeque和LinkedList都實現了Deque接口,應該用哪一個呢?如果只需要Deque接口,從兩端進行操作,一般而言,ArrayDeque效率更高一些,應該被優先使用。不過,如果同時需要根據索引位置進行操作,或者經常需要在中間進行插入和刪除,則應該選LinkedList(注意,這里使用的是List特性,而不是Deque特性了)。

PriorityQueue

有一個直接實現了Queue接口的類,但是它并不是真正意義上的隊列,而是一個優先隊列

PriorityQueue保存元素的順序并不是按照加入的順序,而是根據元素的大小(實現Comparable接口或提供Comparator類)來決定元素在Queue隊列中的順序。默認情況如果我們存入String對象,則是按降序排列。

可以看到,優先隊列的默認大小為11,內部使用Object[]數組來實現隊列結構。

對于擴容操作,可以看到。如果當前容量小于64,則容量增加2;如果當前容量大于等于64,則變為原來的1.5倍。

講講Queue/Deque對應的并發類

PriorityQueue優先隊列沒有對應的并發類。但是Queue接口有對應的并發實現類:java.util.concurrent.ConcurrentLinkedQueue類。

Deque接口有對應的并發實現類:java.util.concurrent.ConcurrentLinkedDeque類。

Collection集合下的Queue/Deque

從類圖來看,實現了Queue接口的類就是PriorityQueue,但要注意它是優先隊列!實現了Deque接口的類有ArrayDeque和LinkedList,2者的內部實現不同,一個是數組,另一個是鏈表。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77270.html

相關文章

  • java集合-List

    摘要:會死循環,因為棧內不會彈出所以判斷會一直執行。集合用于模擬隊列這種數據結構,隊列通常是指先進先出的容器。集合不僅提供了的功能,還提供了雙端隊列,棧的功能。如果有多個線程需要訪問集合中的元素,需要考慮使用將幾個包裝成線程安全集合。 List判斷兩個對象相等只通過equals方法比較返回true即可。 public class A { @Override public ...

    MasonEast 評論0 收藏0
  • Java 集合 Queue

    摘要:除此之外,還有一個接口,代表一個雙端隊列,雙端隊列可以同時從兩端刪除添加元素,因此的實現類既可當成隊列使用,也可當成棧使用。相當于棧方法將一個元素進該雙端隊列所表示的棧的棧頂。 Queue用于模擬隊列這種數據結構,隊列通常是指先進先出(FIFO)的容器。隊列的頭部保存在隊列中存放時間最長的元素,隊列的尾部保存在隊列中存放時間最短的元素。新元素插入(offer)到隊列的尾部,訪問元素(p...

    bang590 評論0 收藏0
  • 源碼|jdk源碼之棧、隊列及ArrayDeque分析

    摘要:棧隊列雙端隊列都是非常經典的數據結構。結合了棧和隊列的特點。因此,在中,有棧的使用需求時,使用代替。迭代器之前源碼源碼之與字段中分析過,容器的實現中,所有修改過容器結構的操作都需要修改字段。 棧、隊列、雙端隊列都是非常經典的數據結構。和鏈表、數組不同,這三種數據結構的抽象層次更高。它只描述了數據結構有哪些行為,而并不關心數據結構內部用何種思路、方式去組織。本篇博文重點關注這三種數據結構...

    ZHAO_ 評論0 收藏0
  • Week 2 - Java 容器 - 詳細剖析 List 之 ArrayList, Vector,

    摘要:底層使用的是雙向鏈表數據結構之前為循環鏈表,取消了循環。快速隨機訪問就是通過元素的序號快速獲取元素對象對應于方法。而接口就是用來標識該類支持快速隨機訪問。僅僅是起標識作用。,中文名為雙端隊列。不同的是,是線程安全的,內部使用了進行同步。 前言 學習情況記錄 時間:week 2 SMART子目標 :Java 容器 記錄在學習Java容器 知識點中,關于List的需要重點記錄的知識點。...

    MartinDai 評論0 收藏0
  • Java 隊列

    摘要:隊列中有元素時,就說明有過期了,線程繼續執行,然后元素出隊,根據相應的移除緩存。所以嚴格來說,雖然實現了隊列接口,但是它的目的卻并不是隊列,而是將生產者消費者線程配對。轉移隊列鏈式轉移隊列。 引言 本周在編寫短信驗證碼頻率限制切面的時候,經潘老師給的實現思路,使用隊列進行實現。 看了看java.util包下的Queue接口,發現還從來沒用過呢! Collection集合類接口,由它派生...

    Pocher 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<