Java基礎(chǔ)學(xué)習(xí):什么是java優(yōu)先隊(duì)列

Java基礎(chǔ)學(xué)習(xí):什么是java優(yōu)先隊(duì)列

長(zhǎng)沙一度軟件培訓(xùn)      2022-05-03 10:07:01     74

Java基礎(chǔ)學(xué)習(xí):什么是java優(yōu)先隊(duì)列,該P(yáng)riorityQueue中是很重要的一個(gè)Java的建立在無(wú)界優(yōu)先級(jí)隊(duì)列和優(yōu)先級(jí)堆的API。本文通過(guò)適當(dāng)?shù)拇a示例介紹了有關(guān)此API及其使用

課程價(jià)格 請(qǐng)咨詢(xún)

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


    該P(yáng)riorityQueue中是很重要的一個(gè)Java的建立在無(wú)界優(yōu)先級(jí)隊(duì)列和優(yōu)先級(jí)堆的API。本文通過(guò)適當(dāng)?shù)拇a示例介紹了有關(guān)此API及其使用的一些復(fù)雜信息。


    概觀


    的的PriorityQueue類(lèi)是一部分的java.util包,是一個(gè)通用的實(shí)現(xiàn)Java中的基于優(yōu)先級(jí)的隊(duì)列。甲隊(duì)列基本上是一個(gè)數(shù)據(jù)結(jié)構(gòu),用于定義特定規(guī)范來(lái)插入和從存放物品的檢索的處理。這個(gè)想法非常類(lèi)似于許多人站在隊(duì)列中說(shuō),獲得一張票。站在隊(duì)列中的第一個(gè)人獲得了獲得機(jī)票的第一個(gè)機(jī)會(huì),最后一個(gè)人獲得了一個(gè)機(jī)會(huì)。人們被添加到隊(duì)列的末尾或尾端。向隊(duì)列添加項(xiàng)目在技術(shù)上稱(chēng)為入隊(duì)過(guò)程,從隊(duì)列中刪除的項(xiàng)目來(lái)自行中的第一個(gè)項(xiàng)目。這被稱(chēng)為出隊(duì)。我們的想法是以FIFO(先進(jìn)先出)的方式對(duì)元素進(jìn)行排序。


    現(xiàn)在,這是最簡(jiǎn)單的架構(gòu),并且緊密地定義了隊(duì)列實(shí)際意味著什么以及如何在計(jì)算機(jī)中進(jìn)行模擬。甲商店通常由一個(gè)簡(jiǎn)單的陣列,其中所述存儲(chǔ)和檢索過(guò)程有這樣的定義范數(shù)表示。優(yōu)先級(jí)隊(duì)列強(qiáng)加了一些特殊規(guī)范。我們將看到更多的內(nèi)容。


    Java實(shí)現(xiàn)隊(duì)列


    JavaAPI在java.util包中具有通用接口名稱(chēng)Queue<E>。這是JavaCollectionframeworkAPI的一部分,旨在在處理之前保存元素。作為Collection的一部分,它具有所有基本的Collection操作。特定于其身份的操作涉及插入,提取和檢查存儲(chǔ)在其中的元素。這些操作中的每一個(gè)都有兩種不同的形式,例如,如果操作失敗則拋出異常,另一種返回特殊值,例如null或false,具體取決于操作。注意與典型隊(duì)列不同,JavaQueue的具體實(shí)現(xiàn)不一定以FIFO方式排序元素。對(duì)于基于優(yōu)先級(jí)的隊(duì)列尤其如此,其中元素的排序是根據(jù)提供的比較器或自然順序完成的。但無(wú)論順序如何,remove()或poll()方法將始終檢索隊(duì)列頭部的元素。這兩種不太可能的方法之間的具體區(qū)別似乎是一個(gè)類(lèi)似的方法是一個(gè)拋出異常(NoSuchElementException)失敗,而后者返回(null),一個(gè)特殊的值。



    請(qǐng)注意,Queue<E>接口不適合在并發(fā)編程中使用,因?yàn)樗鼪](méi)有定義阻塞隊(duì)列方法,其中enqueue和dequeue進(jìn)程等待元素出現(xiàn)在隊(duì)列中或大小可用。有一個(gè)名為BlockingQueue<E>的特定接口,它擴(kuò)展了Queue<E>接口并解決了這些問(wèn)題。


    有一個(gè)名為AbstractQueue<E>的抽象類(lèi),它提供了一些隊(duì)列操作的部分實(shí)現(xiàn)。所述的PriorityQueue<E>類(lèi)是這個(gè)抽象類(lèi)的直接延伸。


    優(yōu)先級(jí)隊(duì)列


    優(yōu)先級(jí)隊(duì)列的Java實(shí)現(xiàn)是一種特殊類(lèi)型的隊(duì)列,其中元素的排序由其自然排序原則確定或根據(jù)創(chuàng)建期間提供的比較器定制。我們?cè)跇?gòu)造期間調(diào)用的構(gòu)造函數(shù)決定了與優(yōu)先級(jí)隊(duì)列一起使用的排序原則。與Queue<E>不同,它不允許null元素,但是某些實(shí)現(xiàn)-例如linkedList-do也不禁止插入null元素。但是,PriorityQueue<E>根本不允許使用null元素。如果優(yōu)先級(jí)隊(duì)列是根據(jù)自然順序構(gòu)造的,則會(huì)拋出任何不可比較的元素插入ClassCastException。


    它被聲明是無(wú)限的并且基于優(yōu)先級(jí)堆。雖然隊(duì)列的大小被稱(chēng)為無(wú)界,但是有一個(gè)內(nèi)部容量來(lái)確定數(shù)組的大小。插入元素時(shí),此大小會(huì)自動(dòng)增大。但是,沒(méi)有具體說(shuō)明尺寸增加的原則的細(xì)節(jié)。


    有七種類(lèi)型的重載構(gòu)造函數(shù),我們可以通過(guò)它們?cè)O(shè)置參數(shù)來(lái)指定隊(duì)列的初始容量,為Comparator提供指定元素的自定義排序,或者使用無(wú)參數(shù)構(gòu)造函數(shù)接受默認(rèn)值。


    PriorityQueue中()


    PriorityQueue(intinitialCapacity)


    PriorityQueue(intinitialCapacity,Comparator<?SuperE>comparator)


    PriorityQueue(Commection<?extendsE>c)


    PriorityQueue(比較器<?SuperE>比較器)


    PriorityQueue(PriorityQueue<?extendsE>c)


    PriorityQueue(SortedSet<?extendsE>c)


    與Queue<E>類(lèi)似,PriorityQueue<E>也不同步,因此應(yīng)在并發(fā)編程中謹(jǐn)慎使用。但是,有一個(gè)同步替代它,稱(chēng)為PriorityBlockingQueue<E>。這與PriorityQueue<E>的工作方式相同,只是具有線(xiàn)程安全的附加資格。


    PriorityQueue<E>中定義的操作與Queue<E>相同,但增加了一些。



    快速示例#1


    讓我們用一個(gè)簡(jiǎn)單的程序?qū)崿F(xiàn)PriorityQueue<E>的一些操作。



    產(chǎn)量



    快速示例#2


    這是另一個(gè)自定義比較器的快速示例。



    產(chǎn)量



    結(jié)論


    優(yōu)先級(jí)隊(duì)列的附加規(guī)范是從列表中刪除的項(xiàng)具有最高優(yōu)先級(jí)。Java將優(yōu)先級(jí)規(guī)則強(qiáng)加給普通隊(duì)列的方式是附加元素的排序原則。此訂單可以根據(jù)程序員的要求進(jìn)行自定義,也可以設(shè)置為默認(rèn)。這是Java中優(yōu)先級(jí)隊(duì)列實(shí)現(xiàn)的本質(zhì)。


  以上就是長(zhǎng)沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):什么是java優(yōu)先隊(duì)列”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。


Java基礎(chǔ)學(xué)習(xí)

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。