欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中PriorityBlockingQueue的入隊知識點總結

 更新時間:2021年01月13日 08:28:02   作者:小妮淺淺  
在本篇文章里小編給大家整理一篇關于java中PriorityBlockingQueue的入隊知識點總結內容,有需要的朋友們可以學習下。

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

1.入隊規(guī)則

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

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

(3)默認的刪除調整中,首先獲取頂部下標和最尾部的元素內容,從頂部的位置開始,將尾部元素的內容逐層向下與當前點的左右子節(jié)點中較小的那個交換,直到判斷元素內容小于或等于左右子節(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;
  //判斷數組是否滿了
  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集合類遍歷的同時如何進行刪除操作

    java集合類遍歷的同時如何進行刪除操作

    這篇文章主要介紹了java集合類遍歷的同時如何進行刪除操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java命令行下Jar包打包小結

    Java命令行下Jar包打包小結

    這篇文章主要介紹了Java命令行下Jar包打包小結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • spring使用Filter過濾器對Response返回值進行修改的方法

    spring使用Filter過濾器對Response返回值進行修改的方法

    這篇文章主要介紹了spring使用Filter過濾器對Response返回值進行修改,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細步驟

    最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細步驟

    idea開發(fā)工具一直是java環(huán)境最好用,很受廣大開發(fā)者喜愛,今天通過本文給大家分享最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的詳細步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2021-06-06
  • 淺談Hibernate對象狀態(tài)之間的神奇轉換

    淺談Hibernate對象狀態(tài)之間的神奇轉換

    這篇文章主要介紹了淺談Hibernate對象狀態(tài)之間的神奇轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • JAVA實現對阿里云DNS的解析管理

    JAVA實現對阿里云DNS的解析管理

    本文主要介紹了JAVA實現對阿里云DNS的解析管理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring 環(huán)境下實現策略模式的示例

    Spring 環(huán)境下實現策略模式的示例

    這篇文章主要介紹了Spring 環(huán)境下實現策略模式的示例,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-10-10
  • JPA中JpaRepository接口的使用方式

    JPA中JpaRepository接口的使用方式

    這篇文章主要介紹了JPA中JpaRepository接口的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot項目部署時application.yml文件的加載優(yōu)先級和啟動腳本問題

    SpringBoot項目部署時application.yml文件的加載優(yōu)先級和啟動腳本問題

    Spring Boot在啟動時會根據一定的優(yōu)先級順序加載配置文件,優(yōu)先級從高到低依次是:命令行參數、Jar包外部config目錄下的配置文件、Jar包同級目錄下的配置文件、classpath下的/config目錄、classpath根路徑
    2024-09-09
  • 30分鐘入門Java8之lambda表達式學習

    30分鐘入門Java8之lambda表達式學習

    本篇文章主要介紹了30分鐘入門Java8之lambda表達式學習,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04

最新評論