定義優(yōu)先級隊列,實現(xiàn)了AbstractQueue
優(yōu)先隊列跟普通的隊列不一樣,普通隊列是一種遵循FIFO規(guī)則的隊列,拿數(shù)據(jù)的時候按照加入隊列的順序拿取。 而優(yōu)先隊列無論插入的順序如何每次拿數(shù)據(jù)的時候都會拿出優(yōu)先級最高(優(yōu)先級value最?。┑臄?shù)據(jù)。
Priority原理分析
優(yōu)先隊列內部維護著一個堆,每次取數(shù)據(jù)的時候都從堆頂拿數(shù)據(jù),這就是優(yōu)先隊列的原理。
每次add的時候都會siftUp(i, e);從下往上調整,因為新增元素是加到最后一個葉子節(jié)點
每次poll的時候都會siftDown(0, x); 從上往下調整,因為刪除元素是刪除堆頂?shù)脑?/p>
例子:
Comparatortest = new Comparator() {?
?@Override?
?public int compare(Integer t1, Integer t2) { return t1 - t2;} };?
?PriorityQueue test2 = new PriorityQueue(6, test);
? ? test2.add(6);
? ? test2.add(10);
? ? test2.add(2);
? ? test2.add(3);
? ? test2.add(4);
? ? test2.add(5);
? ? System.out.println(test2.toString());
? ? System.out.println(test2.remove());
輸出:
[10, 6, 5, 3, 4, 2]
2