2015-05-05 4 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

Я не понимаю, в какой части 3 попадают перед 8 и 4 позади 8. – Osais101

+0

Элементы удаляются в правильном порядке, что вас удивляет? –

ответ

1

В соответствии с the documentation, то PriorityQueue наследует toString() функциональность от AbstractCollection, в котором говорится, что он печатает элементы коллекции, возвращаемой в iterator() в скобках.

Глядя на iterator() способе PriorityQueue,

Возвращает итератор над элементами в этой очереди. Итератор не возвращает элементы в каком-либо конкретном порядке.

Так что выход вашей программы не имеет никакого значения, пока вы не печатать их после вызова remove(), в этом случае они сортируются в соответствии с их естественным (числовым) порядком, как ожидались.

+0

О, хорошо, что отвечает на мой вопрос полностью, спасибо вам большое !!!! Я думал, что есть причина, стоящая за конкретным порядком перед печатью. – Osais101

+0

Удовольствие! Не забывайте поднимать/принимать, если это было полезно;) –

Смежные вопросы