更新時間:2020-04-08 12:27:14 來源:動力節點 瀏覽2562次
該PriorityQueue中是很重要的一個Java的建立在無界優先級隊列和優先級堆的API。本文通過適當的代碼示例介紹了有關此API及其使用的一些復雜信息。
概觀
的的PriorityQueue類是一部分的java.util包,是一個通用的實現Java中的基于優先級的隊列。甲隊列基本上是一個數據結構,用于定義特定規范來插入和從存放物品的檢索的處理。這個想法非常類似于許多人站在隊列中說,獲得一張票。站在隊列中的第一個人獲得了獲得機票的第一個機會,最后一個人獲得了一個機會。人們被添加到隊列的末尾或尾端。向隊列添加項目在技術上稱為入隊過程,從隊列中刪除的項目來自行中的第一個項目。這被稱為出隊。我們的想法是以FIFO(先進先出)的方式對元素進行排序。
現在,這是最簡單的架構,并且緊密地定義了隊列實際意味著什么以及如何在計算機中進行模擬。甲商店通常由一個簡單的陣列,其中所述存儲和檢索過程有這樣的定義范數表示。優先級隊列強加了一些特殊規范。我們將看到更多的內容。
Java實現隊列
JavaAPI在java.util包中具有通用接口名稱Queue<E>。這是JavaCollectionFrameworkAPI的一部分,旨在在處理之前保存元素。作為Collection的一部分,它具有所有基本的Collection操作。特定于其身份的操作涉及插入,提取和檢查存儲在其中的元素。這些操作中的每一個都有兩種不同的形式,例如,如果操作失敗則拋出異常,另一種返回特殊值,例如null或false,具體取決于操作。注意與典型隊列不同,JavaQueue的具體實現不一定以FIFO方式排序元素。對于基于優先級的隊列尤其如此,其中元素的排序是根據提供的比較器或自然順序完成的。但無論順序如何,remove()或poll()方法將始終檢索隊列頭部的元素。這兩種不太可能的方法之間的具體區別似乎是一個類似的方法是一個拋出異常(NoSuchElementException)失敗,而后者返回(null),一個特殊的值。
請注意,Queue<E>接口不適合在并發編程中使用,因為它沒有定義阻塞隊列方法,其中enqueue和dequeue進程等待元素出現在隊列中或大小可用。有一個名為BlockingQueue<E>的特定接口,它擴展了Queue<E>接口并解決了這些問題。
有一個名為AbstractQueue<E>的抽象類,它提供了一些隊列操作的部分實現。所述的PriorityQueue<E>類是這個抽象類的直接延伸。
優先級隊列
優先級隊列的Java實現是一種特殊類型的隊列,其中元素的排序由其自然排序原則確定或根據創建期間提供的比較器定制。我們在構造期間調用的構造函數決定了與優先級隊列一起使用的排序原則。與Queue<E>不同,它不允許null元素,但是某些實現-例如LinkedList-do也不禁止插入null元素。但是,PriorityQueue<E>根本不允許使用null元素。如果優先級隊列是根據自然順序構造的,則會拋出任何不可比較的元素插入ClassCastException。
它被聲明是無限的并且基于優先級堆。雖然隊列的大小被稱為無界,但是有一個內部容量來確定數組的大小。插入元素時,此大小會自動增大。但是,沒有具體說明尺寸增加的原則的細節。
有七種類型的重載構造函數,我們可以通過它們設置參數來指定隊列的初始容量,為Comparator提供指定元素的自定義排序,或者使用無參數構造函數接受默認值。
PriorityQueue中()
PriorityQueue(intinitialCapacity)
PriorityQueue(intinitialCapacity,Comparator<?SuperE>comparator)
PriorityQueue(Commection<?extendsE>c)
PriorityQueue(比較器<?SuperE>比較器)
PriorityQueue(PriorityQueue<?extendsE>c)
PriorityQueue(SortedSet<?extendsE>c)
與Queue<E>類似,PriorityQueue<E>也不同步,因此應在并發編程中謹慎使用。但是,有一個同步替代它,稱為PriorityBlockingQueue<E>。這與PriorityQueue<E>的工作方式相同,只是具有線程安全的附加資格。
PriorityQueue<E>中定義的操作與Queue<E>相同,但增加了一些。
快速示例#1
讓我們用一個簡單的程序實現PriorityQueue<E>的一些操作。
產量
快速示例#2
這是另一個自定義比較器的快速示例。
產量
結論
優先級隊列的附加規范是從列表中刪除的項具有最高優先級。Java將優先級規則強加給普通隊列的方式是附加元素的排序原則。此訂單可以根據程序員的要求進行自定義,也可以設置為默認。這是Java中優先級隊列實現的本質。
以上就是動力節點java培訓機構的小編針對“Java基礎學習:什么是java優先隊列”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習