溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PriorityQueue優(yōu)先級(jí)隊(duì)列是什么意思

發(fā)布時(shí)間:2021-07-02 16:20:07 來(lái)源:億速云 閱讀:235 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“PriorityQueue優(yōu)先級(jí)隊(duì)列是什么意思”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PriorityQueue優(yōu)先級(jí)隊(duì)列是什么意思”吧!

JDK版本是1.8

特點(diǎn)

1.不能插入null對(duì)象

2.插入的對(duì)象支持排序。(可以自己傳入比較器)

3.如果排序的結(jié)果一樣的話,那么這兩個(gè)的對(duì)象在隊(duì)列中的位置是前后隨機(jī)的

4.隊(duì)列是無(wú)界的

5.線程不安全,如果安全請(qǐng)使用PriorityBlockingQueue

6.是一個(gè)完全二叉樹(shù)來(lái)實(shí)現(xiàn)的最小二叉堆(非子節(jié)點(diǎn)的值,不大于其左右子節(jié)點(diǎn)),所以使用數(shù)組進(jìn)行存儲(chǔ)(父子節(jié)點(diǎn)的關(guān)系可以通過(guò)公式進(jìn)行計(jì)算)。

主要的方法

1. add() 和 offer() 插入方法

兩種方法沒(méi)有什么本質(zhì)的區(qū)別,add()只是把offer()方法包裝一下。

 if (e == null)
            throw new NullPointerException();
        modCount++;
        int i = size;
        if (i >= queue.length)
            grow(i + 1);//擴(kuò)容
        size = i + 1;
        if (i == 0)
            queue[0] = e;//隊(duì)列為空的情況下,直接放入
        else
            siftUp(i, e); //調(diào)整節(jié)點(diǎn)(該方法是主要的方法),在位置i處插入e,和e的父節(jié)點(diǎn)比較,直到該節(jié)點(diǎn)大于或等于其父級(jí)或者是根。
        return true;

2.peek()獲取元素

獲取隊(duì)列頭元素,但不會(huì)刪除

(size == 0) ? null : (E) queue[0];

3.poll()獲取元素

獲取隊(duì)列頭元素,但會(huì)刪除頭元素,并且因?yàn)閯h除頭元素,會(huì)調(diào)整隊(duì)列的元素位置

 if (size == 0)
            return null;
        int s = --size; //隊(duì)列大小減一
        modCount++;
        E result = (E) queue[0];//獲取頭元素
        E x = (E) queue[s];//記錄隊(duì)列最后的元素
        queue[s] = null;//刪除隊(duì)列最后的元素
        if (s != 0)
            siftDown(0, x);//調(diào)整整個(gè)隊(duì)列的元素的位置,在位置0處插入項(xiàng)x,和x的葉子節(jié)點(diǎn)比較,直到它小于或等于其子項(xiàng)或者是葉子
        return result;

應(yīng)用

有關(guān)Top K 算法的解決方案(具體可以搜索相關(guān)的資料)

感謝各位的閱讀,以上就是“PriorityQueue優(yōu)先級(jí)隊(duì)列是什么意思”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PriorityQueue優(yōu)先級(jí)隊(duì)列是什么意思這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI