Wie sollte ich eine Prioritätswarteschlange richtig durchlaufen?

8

Ich habe eine Java-Zuweisung, die das Iterieren einer Prioritätswarteschlange beinhaltet. Die Warteschlange besteht aus Objekten mit einer Zeichenfolge und einem int darin, und ich muss eine Möglichkeit haben, die Zeichenfolge eines separaten Objekts gegen alle Objekte in der Warteschlange zu prüfen.

Wäre es der beste Weg, dies zu tun, ein Iterator-Objekt zu sein? Das scheint zu unordentlich. Ich könnte aus der Warteschlange nehmen und in die Warteschlange stellen, aber das scheint ineffizient zu sein. Vielleicht eine foreach-Schleife?

    
Anon 07.12.2012, 07:20
quelle

3 Antworten

9

Ja, wenn Sie jedes einzelne Element in der Sammlung überprüfen müssen, ist ein iterator oder for each wahrscheinlich am besten.

%Vor%

Oder

%Vor%     
The111 07.12.2012, 07:29
quelle
2

Ein kleines Detail: Wenn es eine Chance gibt, dass Ihre Warteschlange während der Schleife geändert werden kann, dann verursachen sowohl iterator als auch for each eine ConcurrentModificationException ; Wenn die Chance besteht, dass die Warteschlange während der Verarbeitung geändert wird, können Sie poll() :

verwenden %Vor%     
Haroldo_OK 01.06.2015 18:44
quelle
1

Wenn Ihnen die Reihenfolge egal ist (in diesem Fall - warum beschäftigen Sie sich mit PriorityQueue ?), verwenden Sie Iterator. Wenn Sie nach Priorität iterieren möchten, lesen Sie den Ratschlag von Javadoc :

  

Wenn Sie eine geordnete Traversierung benötigen, sollten Sie sie verwenden   Arrays.sort (pq.toArray ()).

    
Miljen Mikic 07.12.2012 08:05
quelle