亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java中PriorityBlockingQueue的入隊知識點總結

瀏覽:2日期:2022-08-18 14:47:51

在PriorityBlockingQueue中添加元素同樣有四種方法,因為是樹狀的結構,所以在插入方法上也有所變化,是自下而上的操作過程。在入隊的規則上有三個要點需要我們注意。鑒于PriorityBlockingQueue入隊方法主要通過offer(E)實現,所以我們就這種方法作主要講解。

1.入隊規則

(1)默認的插入規則中,新加入的元素可能會破壞小頂堆的性質,因此需要進行調整。

(2)調整的過程為:從尾部下標的位置開始,將加入的元素逐層與當前點的父節點的內容進行比較并交換,直到滿足父節點內容都小于子節點的內容為止。

(3)默認的刪除調整中,首先獲取頂部下標和最尾部的元素內容,從頂部的位置開始,將尾部元素的內容逐層向下與當前點的左右子節點中較小的那個交換,直到判斷元素內容小于或等于左右子節點中的任何一個為止。

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; //判斷數組是否滿了 while ((n = size) >= (cap = (array = queue).length)) //數組擴容 tryGrow(array, cap); try { //拿到比較器 Comparator<? super E> cmp = comparator; //判斷是否有自定義比較器 if (cmp == null) //堆上浮 siftUpComparable(n, e, array); else //使用自定義比較器進行堆上浮 siftUpUsingComparator(n, e, array, cmp); //隊列長度 +1 size = n + 1; //喚醒休眠的出隊線程 notEmpty.signal(); } finally { //釋放鎖 lock.unlock(); } return true;}

可以看出前三個方法內部都是通過 offer(e) 方法實現的。

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲一级高清在线中文字幕 | 日本欧洲95视频 | 亚洲免费观看视频 | 精品一区二区在线观看 1080p | 痴情的后裔韩剧免费观看中文高清版 | 九九香蕉| 国产页| 欧美一级特黄视频 | 欧美国产精品日韩在线 | avtt加勒比手机版天堂网 | 国产精品久久免费 | 片在线观看免费观看视频 | 黄色一级片子 | 亚洲视频在线免费播放 | 伊人激情久久综合中文字幕 | 狠狠色婷婷七月色综合 | 婷婷五月色综合香五月 | 久久精品视频99精品视频150 | 午夜色a大片在线观看免费 午夜色图 | 国产一级特黄aaaa大片野外 | 夜色亚洲 | 亚洲精品在线不卡 | 99九九影院理论片在线 | 国产亚洲青色国产 | 成人黄色免费在线观看 | 国产亚洲网站 | 一级毛片女学护士 | 色综合久久久久综合99 | 国产乱通伦 | 亚洲日产综合欧美一区二区 | 国产乱色 | 欧美视频在线免费播放 | 国产小视频免费在线观看 | 国产一区二区三区在线免费 | 欧美换爱交换乱理伦片不卡片 | 国产成人www免费人成看片 | 成年女人免费v片 | 思思久久q6热在精品国产 | 国产www色| a网站| 美国人与性xxxxxxx |