1. 程式人生 > >PriorityQueue原始碼的學習與應用

PriorityQueue原始碼的學習與應用

PriorityQueue原始碼解讀

1.繼承

在這裡插入圖片描述
繼承了 AbstractQueue類,實現了 java.io.Serializable 介面

2.屬性

在這裡插入圖片描述

3.方法

(1)add()
在這裡插入圖片描述

新增元素add方法就是呼叫offer方法,如果佇列中的元素大於 queue.length,進行陣列的擴容;若佇列中沒有元素(size == 0),直接新增到queue[0]位置;若有元素,則呼叫 siftUp()方法,進行從上到下調整(小根堆)。

在這裡插入圖片描述
上圖中的程式碼就是原始碼中的佇列調整的過程。

(2)peek()
在這裡插入圖片描述
peek()方法就是返回佇列堆頂的元素

(3)remove()
在這裡插入圖片描述


刪除陣列中的元素,先通過indexOf()方法,找到元素所在的索引位置,因為刪除一個元素牽扯到重新排序的問題,所以呼叫 removeAt()方法,進行重新調整。

在這裡插入圖片描述

(4)grow()
在這裡插入圖片描述
1.5倍方式擴容