優先級佇列: priorityQueue
-
優先級佇列是一個基于優先級堆來實作,使用陣列存放內容,添加操作會進行擴容,
基于元素的Comparable介面進行排序,或者在ProrityQueue構造的時候傳一個Comparator介面指定
排序規則,優先級佇列中的元素不能為null. 如果使用自然排序,類必須實作Comparable介面,否則
在佇列內部轉換時會報ClassCastException -
相比于普通佇列的最先入隊的,在佇列頭部, 優先級佇列的頭部就是排好序后最小的元素.
PriorityQueue 和 iterator()回傳的迭代器 實作了Collection和Iterator介面所有的方法,
但是注意了:iterator() 不保證佇列元素的優先級排序,就是你通過迭代器的方式輸出元素,可能并不是按照優先級來的 -
ProrityQueue不保證執行緒安全,多執行緒同時修改會有并發問題,多執行緒環境下使用ProrityBlockingQueue
ProtityQueue中提供的入隊和出隊操作的時間復雜度是log(n)PriorityQueue<Stu> queue = new PriorityQueue(); Stu a = new Stu(1, "ab"); Stu b = new Stu(1, "cd"); Stu c = new Stu(1, "ed"); queue.add(c); queue.add(b); queue.add(a);
// 順序是 a b c
// System.out.println(queue.poll());
// System.out.println(queue.poll());
// System.out.println(queue.poll());
// 順序不一定是a b c
Iterator<Stu> iterator = queue.iterator();
while (iterator.hasNext()) {
Stu stu = iterator.next();
System.out.println(stu);
}
場景分析: 你要發送一個延時訊息,你講三個不同時間點的訊息 放到佇列,正常的佇列是先進先出,優先級佇列,會按照你指定的規則 進行排序,這樣會讓先到期的訊息進行發送
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233983.html
標籤:其他
上一篇:iOS多執行緒的鎖,你知道多少?
