2015-05-05 120 views
-1
import java.util.PriorityQueue; 

public class QueueInts{ 
    public static void main(String[] args) { 
    PriorityQueue<Integer> q = new PriorityQueue<>(); 
    String expression = "(2+4)-8 * (3-1)"; 
    String symbols = "()+-*/% "; 

    for (int i = 0; i < expression.length(); i++) { 
     if (!symbols.contains("" + expression.charAt(i)))   
      q.add((int)expression.charAt(i)-48); 
     System.out.println(q); 
    } 

    System.out.println(q); 
    while (q.size() > 0)  
     System.out.println(" " + q.remove());  
} 
} 

輸出爲[]此優先級隊列如何工作?

[2] 

[2] 

[2, 4] 

[2, 4] 

[2, 4] 

[2, 4, 8] 

[2, 4, 8] 

[2, 4, 8] 

[2, 4, 8] 

[2, 4, 8] 

[2, 3, 8, 4] 

[2, 3, 8, 4] 

[1, 2, 8, 4, 3] 

[1, 2, 8, 4, 3] 

[1, 2, 8, 4, 3] 

1 

2 

3 

4 

8 

我想我明白當它的[2,4,8]但是我不後明白。任何人都可以告訴我這個代碼是如何工作的?

+2

你到底在期待什麼?你不明白什麼? –

+0

我不明白在8和8之後放置8的部分。 – Osais101

+0

元素按正確的順序被刪除,什麼讓你感到驚訝? –

回答

1

作爲每the documentation,所述PriorityQueue繼承其從AbstractCollectiontoString()功能性,其中指出,它打印出集合中的元素,如括號返回由iterator()

綜觀PriorityQueueiterator()方法,

返回在此隊列中的元素的迭代器。迭代器不會以任何特定順序返回元素。

所以,你的程序的輸出沒有任何意義,直到你把它們打印出來,你叫remove(),在這種情況下他們排序並根據其自然(數值)爲了按預期之後。

+0

哦,好的,我非常感謝你回答我的問題!我認爲印前的特定訂單背後有一個原因。 – Osais101

+0

快樂!如果有幫助,不要忘記注意/接受;) –