[英]How to I override the java.util.PriorityQueue contains function?
[英]How can I peek the tail of a java.util.PriorityQueue?
所以我在玩java.util.PriorityQueue
的源代碼。 你可以在這里查看: http : //kickjava.com/src/java/util/PriorityQueue.java.htm
我需要查看隊列的尾部。 這個類只提供窺視隊列的頭部。 有沒有一種簡單的方法可以修改這個類以允許我選擇尾部?
我正在尋找本課程中的任何更改/智能技巧以允許我這樣做。 我的第一次嘗試是查看queue[size]
但它沒有用。
Java 的 PriorityQueue 和大多數優先級隊列一樣,是用堆實現的。
堆是一種數據結構,它只維護所有父母都小於他們的孩子,或者所有父母都大於他們的孩子的屬性。 孩子之間沒有固有的秩序。
因此,找到尾部的唯一方法是在底層之間進行線性搜索,對於大小為n
優先級隊列,這花費O(n)
時間。
是的,但以額外的空間復雜性為代價:
PriorityQueue<Integer> pqNew = new PriorityQueue<>(java.util.Collections.reverseOrder());
現在將PriorityQueue
的元素添加到這個pqNew
。 因此, pqNew.peek()
將為您提供所需的答案,即原始PriorityQueue
的尾部元素。
如何使用 toArray() 方法並訪問最后一個位置?
PriorityQueue<Integer> pq = new PriorityQueue<>(3);
pq.offer(1); pq.offer(2); pq.offer(3);
System.out.println((int) pq.toArray()[pq.size()-1]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.