2012-11-03 55 views
1

這似乎是一個非常基本的問題,但我一直堅持了幾個小時。Enqueue/Dequeue OR offer/poll

什麼時候使用offer/poll ?!什麼時候我們使用方法enqueue/dequeue &?

我想用void enqueue(int x, int p)int dequeue()方法創建整數的PQ,我該如何聲明這樣的隊列?

謝謝。

+1

哪個隊列你在說什麼?標準['java.util.Queue'](http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html)沒有任何'enqueue' /'dequeue'方法。 –

+0

有關澄清問題的詳細信息,請參見['隊列'](http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html)。 – trashgod

回答

6

我假設「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的隊列沒有enqueuedequeue方法;這些操作是使用以下方法進行:

  • 入列:
    • ​​:拋出異常,如果它無法插入對象
    • offer(e):返回false如果無法插入對象
  • 退出:
    • remove():拋出異常,如果隊列爲空
    • poll():返回null如果隊列爲空
  • 看看在隊列中的第一個對象:
    • element():拋出異常,如果隊列爲空
    • peek():返回null如果隊列爲空

而現在,最後:何時使用offeradd

關於offeradd:嗯,這取決於你想如何處理插入的隊列中失敗的原因:

收藏繼承添加方法,其中隊列,插入一個元素,除非它違反了隊列的容量限制,在這種情況下,它會拋出IllegalStateException。所述報價方法,其旨在僅僅上使用有界隊列,不同於添加僅在於它表示失敗通過返回插入的元件。

(參見:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html

希望這有助於你

+0

謝謝,它幫助了我很大。我很感激。 – InspiringProgramming

+0

@InspiringProgramming:那麼你應該接受答案,並upvote它。 –

+0

我仍然不被允許投票,因爲我的聲望低於15:( 我希望我可以。 – InspiringProgramming