java中PriorityBlockingQueue的入隊知識點總結(jié)
在PriorityBlockingQueue中添加元素同樣有四種方法,因為是樹狀的結(jié)構(gòu),所以在插入方法上也有所變化,是自下而上的操作過程。在入隊的規(guī)則上有三個要點需要我們注意。鑒于PriorityBlockingQueue入隊方法主要通過offer(E)實現(xiàn),所以我們就這種方法作主要講解。
1.入隊規(guī)則
(1)默認(rèn)的插入規(guī)則中,新加入的元素可能會破壞小頂堆的性質(zhì),因此需要進(jìn)行調(diào)整。
(2)調(diào)整的過程為:從尾部下標(biāo)的位置開始,將加入的元素逐層與當(dāng)前點的父節(jié)點的內(nèi)容進(jìn)行比較并交換,直到滿足父節(jié)點內(nèi)容都小于子節(jié)點的內(nèi)容為止。
(3)默認(rèn)的刪除調(diào)整中,首先獲取頂部下標(biāo)和最尾部的元素內(nèi)容,從頂部的位置開始,將尾部元素的內(nèi)容逐層向下與當(dāng)前點的左右子節(jié)點中較小的那個交換,直到判斷元素內(nèi)容小于或等于左右子節(jié)點中的任何一個為止。
2.入隊方法
入隊方法有:add(E), put(E), offer(E, timeout, TimeUnit), offer(E)
public void put(E e) {
offer(e); // never need to block
}
public boolean offer(E e) {
//判斷是否為空
if (e == null)
throw new NullPointerException();
//顯示鎖
final ReentrantLock lock = this.lock;
lock.lock();
//定義臨時對象
int n, cap;
Object[] array;
//判斷數(shù)組是否滿了
while ((n = size) >= (cap = (array = queue).length))
//數(shù)組擴(kuò)容
tryGrow(array, cap);
try {
//拿到比較器
Comparator<? super E> cmp = comparator;
//判斷是否有自定義比較器
if (cmp == null)
//堆上浮
siftUpComparable(n, e, array);
else
//使用自定義比較器進(jìn)行堆上浮
siftUpUsingComparator(n, e, array, cmp);
//隊列長度 +1
size = n + 1;
//喚醒休眠的出隊線程
notEmpty.signal();
} finally {
//釋放鎖
lock.unlock();
}
return true;
}
可以看出前三個方法內(nèi)部都是通過 offer(e) 方法實現(xiàn)的。
相關(guān)文章
spring使用Filter過濾器對Response返回值進(jìn)行修改的方法
這篇文章主要介紹了spring使用Filter過濾器對Response返回值進(jìn)行修改,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09
最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細(xì)步驟
idea開發(fā)工具一直是java環(huán)境最好用,很受廣大開發(fā)者喜愛,今天通過本文給大家分享最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細(xì)步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-06-06
淺談Hibernate對象狀態(tài)之間的神奇轉(zhuǎn)換
這篇文章主要介紹了淺談Hibernate對象狀態(tài)之間的神奇轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Spring 環(huán)境下實現(xiàn)策略模式的示例
這篇文章主要介紹了Spring 環(huán)境下實現(xiàn)策略模式的示例,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下2020-10-10
SpringBoot項目部署時application.yml文件的加載優(yōu)先級和啟動腳本問題
Spring Boot在啟動時會根據(jù)一定的優(yōu)先級順序加載配置文件,優(yōu)先級從高到低依次是:命令行參數(shù)、Jar包外部config目錄下的配置文件、Jar包同級目錄下的配置文件、classpath下的/config目錄、classpath根路徑2024-09-09
30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí)
本篇文章主要介紹了30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04

