2017-05-06 1 views
0

Für dieses Add:zu Priorityqueue <Integer>

PriorityQueue<Integer> pq = new PriorityQueue<>(); 
    pq.add(2); 
    System.out.println(pq); 
    pq.add(4); 
    System.out.println(pq); 
    pq.add(1); 
    System.out.println(pq); 

ich diesen Ausgang bin immer:

[2] 
[2, 4] 
[1, 4, 2] 

Warum ist die Ausgabe für die dritte Zeile [2,4,1] nicht?

Antwort

2

Nirgendwo steht geschrieben, dass die toString Implementierung für PriorityQueue sie in Reihenfolge zurückgibt. Eigentlich ist das Problem, dass:

  • PriorityQueue keine toString() Implementierung liefert, so AbstractCollection::toString() verwendet wird.
  • AbstractCollection::toString() druckt Artikel von iterator() Verfahren (so durch next() und hasNext() Aufruf)
  • die Dokumentation über PriorityQueue::iterator Zustände: in dieser Warteschlange einen Iterator über die Elemente zurück. Der Iterator gibt die Elemente nicht in einer bestimmten Reihenfolge zurück.

Also im Grunde beruht toString auf iterator(), die noch keinen Blick auf die Elemente geordnet bereitstellt.

Verwandte Themen