2015-11-08 146 views
0

代碼

import java.util.*; 
class TestCollection12 { 
    public static void main(String args[]) { 

     PriorityQueue<String> queue = new PriorityQueue<String>(); 
     queue.add("Amit"); 
     queue.add("Vijay"); 
     queue.add("Karan"); 
     queue.add("Jai"); 
     queue.add("Rahul"); 

     System.out.println("head:"+queue.element()); 
     System.out.println("head:"+queue.peek()); 

     System.out.println("iterating the queue elements:"); 
     Iterator itr=queue.iterator(); 
     while (itr.hasNext()) { 
      System.out.println(itr.next()); 
     } 

     queue.remove(); 
     queue.poll(); 

     System.out.println("after removing two elements:"); 
     Iterator<String> itr2=queue.iterator(); 
     while (itr2.hasNext()) { 
      System.out.println(itr2.next()); 
     } 
    } 
} 

預計

amit amit amit vijay karan jai rahul 
karan jai rahul 
+0

的詳細信息請縮進您的代碼並編輯您的問題以包含輸出。 – Arc676

+0

這是很好的,你正在顯示你的代碼,但也請添加一些文本(不是在問題標題),說明你正在努力實現什麼以及如何出錯。另外,你的代碼似乎在其中有虛假的'
'標籤,並且可能通過使用縮進使其更具可讀性? – jochen

回答

0

從DOC: 的PriorityQueue使用默認的初始容量(11),根據自己的自然順序對其元素。 element()& peek返回隊列的頭部。 第一次迭代後

Amit 
Jai 
Karan 
Vijay 
Rahul 

刪除()&輪詢() - >刪除隊列的頭部。 經過第二次迭代後,輸出將爲

Karan 
Rahul 
Vijay 

它按預期工作!

0

這是關於priorty隊列。 在優先級隊列中,它像數據結構一樣存儲在數組中。對於你的例子它被存儲爲;

[0] "Amit" 
[1] "Jai" 
[2] "Karan" 
[3] "Vijay" 
[4] "Rahul" 

總是零索引的元素是所述頂部元件,而當你偷看或輪詢的第一個被輪詢,並且陣列根據該改變。

第一次刪除呼叫後,數組更改如下。

[0] "Jai" 
[1] "Rahul" 
[2] "Karan" 
[3] "Vijay" 

再次調用poll之後;

[0] "Karan" 
[1] "Rahul" 
[2] "Vijay" 

作爲總結,最上面的元素總是最小的(或最大的)一個。彈出訂單更改後。您可以閱讀https://en.wikipedia.org/wiki/Priority_queue

+0

Ugur Basak @我同意你,但你怎麼做indexing.first第一次你把「rahul」在底部爲什麼? –

+0

Rakesh,實際上我使用Eclipse的變量視圖獲得了這個值。 此動畫還可以幫助您查看後端的情況https://www.cs.usfca.edu/~galles/visualization/Heap.html每次插入時,最大值/最小值都會嘗試到達頂部索引,通過交換價值。每次交換都會通過到達陣列的下半部分來實現。對於拉胡爾來說,拉胡爾加入到第五指數中,我們將其與第二指數進行比較,第二指數比拉胡爾小,我們不進行掉期操作。但如果它小於第二個,那麼我們也需要交換它。 –

+0

Ugur basak @這是Priority Queue工作的方式嗎? –

相關問題