這似乎是一個非常基本的問題,但我一直堅持了幾個小時。Enqueue/Dequeue OR offer/poll
什麼時候使用offer/poll ?!什麼時候我們使用方法enqueue/dequeue &?
我想用void enqueue(int x, int p)
和int dequeue()
方法創建整數的PQ,我該如何聲明這樣的隊列?
謝謝。
這似乎是一個非常基本的問題,但我一直堅持了幾個小時。Enqueue/Dequeue OR offer/poll
什麼時候使用offer/poll ?!什麼時候我們使用方法enqueue/dequeue &?
我想用void enqueue(int x, int p)
和int dequeue()
方法創建整數的PQ,我該如何聲明這樣的隊列?
謝謝。
我假設「PQ」的意思是「優先隊列」。我從來沒有使用過這樣的隊列(我的隊列的心理圖像是嚴格的FIFO結構),但在閱讀文檔後,我認爲你可以這樣做:
首先,你需要創建類您想要存儲在隊列中的對象。假設int
內容int
優先級:
public class MyClass implements Comparable<MyClass> {
private int x, p;
/*
* x: Contents
* p: Priority
*/
public MyClass(int x, int p) {
this.x = x;
this.p = p;
}
@override
public int compareTo(MyClass o) {
return this.p - o.p;
}
public int getX() {
return x;
}
}
現在,創建你的優先級隊列。如果我理解正確類的文檔,它會使用compareTo
方法的對象進行排序:
....
PriorityQueue<MyClass> pq = new PriorityQueue<MyClass>();
....
pq.add(new MyClass(x, p));
....
檢查:http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
Java的隊列沒有enqueue
和dequeue
方法;這些操作是使用以下方法進行:
offer(e)
:返回false
如果無法插入對象remove()
:拋出異常,如果隊列爲空poll()
:返回null
如果隊列爲空element()
:拋出異常,如果隊列爲空peek()
:返回null
如果隊列爲空而現在,最後:何時使用offer
和add
?
關於offer
和add
:嗯,這取決於你想如何處理插入的隊列中失敗的原因:
的從收藏繼承添加方法,其中隊列,插入一個元素,除非它違反了隊列的容量限制,在這種情況下,它會拋出IllegalStateException。所述報價方法,其旨在僅僅上使用有界隊列,不同於添加僅在於它表示失敗通過返回假插入的元件。
(參見:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html)
希望這有助於你
謝謝,它幫助了我很大。我很感激。 – InspiringProgramming
@InspiringProgramming:那麼你應該接受答案,並upvote它。 –
我仍然不被允許投票,因爲我的聲望低於15:( 我希望我可以。 – InspiringProgramming
哪個隊列你在說什麼?標準['java.util.Queue'](http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html)沒有任何'enqueue' /'dequeue'方法。 –
有關澄清問題的詳細信息,請參見['隊列'](http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html)。 –
trashgod