簡體   English   中英

如何查看 java.util.PriorityQueue 的尾部?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM