Java優先佇列 學後雜記

2021-08-14 15:45:57 字數 1140 閱讀 9173

//本人菜鳥  如有錯誤求指出

實現優先佇列 首先需要解決儲存問題   鏈式儲存結構?順序儲存結構? 

由於優先佇列預設使用最小堆實現  即  根結點值小於其葉子節點值  。也是一種完全二叉樹 在順序儲存時 其根結點 與其對應的孩子節點有特定的 下標關係   採用陣列儲存資料  當父結點下標(從0開始)為 i時 其左孩子下標為2*i+1  右孩子為2*i+2。這樣解決了優先佇列資料儲存問題。

接下來  集合中方法實現 主要涉及 增刪改查   使用陣列儲存時還要考慮到陣列自動擴容

jdk中  一共有6個量  size記錄 當前元素個數   modcount記錄儲存更改次數 防止 多執行緒同步問題  object queue 儲存元素

default_initial_capacity 儲存  預設的初始化空間 comparator<? super e> comparator 儲存 自定義的比較器

max_array_size儲存用於陣列擴容時    陣列容量已經比較大時的 輔助處理值?

主要核心有以下方法: 

加入佇列  如佇列中元素為0  直接加入堆頂  否則 呼叫上浮函式 從佇列尾部  將當前元素加入堆中合適位置、

出佇列  如佇列中元素為1個 則直接出佇列  否則 呼叫下浮函式 從佇列頭部 將佇列尾部元素加入到佇列中合適位置

加入佇列時需要考慮擴容問題    如容量不足 需要擴容

擴容實現    當當前容量極小時  每次擴容為原來的兩倍+2   否則 擴容為原容量的1.5倍  如新容量已經大於 max_array_size 則呼叫hugecapacity方法 根據mincapacity與 max_array_size的關係 將新容量設定為 max_array_size 或integer.max_value  呼叫 arrays.copyof()方法  實現陣列擴容及儲存原陣列元素

增刪已經完畢  還有  改查

indexof  為null 或不存在指定元素 返回 -1  否則返回陣列中的下標

contains方法呼叫 indexof方法實現 

remove  刪除優先佇列中位置靠前的指定元素 先indexof   合法  呼叫 remove(int i) 在第二個remove中 取出佇列尾部元素  將對位元素在該位置 先 下浮  如未沉下去  再將其上浮

peek  返回佇列頭部元素  直接返回 queue

JAVA佇列之優先佇列

最近在專案開發中開發了全雙工非同步長連線的通訊元件,內部用到了延遲佇列。而延遲佇列的內部實現的儲存是用到了優先佇列,當時看c 的資料結構時,了解過優先佇列,用的儲存是二叉樹的邏輯,應該叫完全二叉樹,也可以叫做最大堆。下面看一下二叉樹的演算法,主要看插入和刪除。二叉樹顧名思義就像一棵樹,每個節點下最多...

Java優先順序佇列PriotyQueue

優先順序佇列,顧名思義,和傳統 先進後出 的佇列相比,優先順序佇列在元素加入時就根據該元素的優先順序插入到相應位置。實際上優先順序佇列priotyqueue在poll時還是遵循先進後出,只是資料在進入時已經根據優先順序排序了。實現優先順序佇列需要實現乙個comparator,測試 如下 public...

java手寫優先順序佇列

優先順序佇列是比棧和佇列更專用的資料結構。優先順序佇列與上面普通的佇列相比,主要區別在於佇列中的元素是有序的,關鍵字最小 或者最大 的資料項總在隊頭。資料項插入的時候會按照順序插入到合適的位置以確保佇列的順序。優先順序佇列的內部實現可以用陣列或者一種特別的樹 堆來實現。package com.cn....