2013-06-03 11 views
7

Ich habe eine Warteschlange mit Objekten erstellt, die ich in der Reihenfolge durchlaufen möchte, in der sie in der Warteschlange platziert wurden (erstes Objekt in Warteschlange, zweites Objekt in Warteschlange, drittes Objekt). ..)Iterieren durch die Warteschlange von Objekten in der Reihenfolge

Ich sah eine Möglichkeit, dies online zu tun, aber ich bin mir nicht sicher, ob dies garantiert, dass Objekte in der Warteschlange in der richtigen Reihenfolge besucht werden?

for(MyObject anObject : queue){ 
    //do someting to anObject... 

Vielen Dank für Ihre Hilfe.

+0

Machen Sie Ihre Warteschlange "List" implementieren. –

+0

Was ist der Typ der 'Warteschlange'? – Djon

Antwort

4

Es hängt davon ab, welche Queue Implementierung Sie verwenden. Im Allgemeinen ist dies nicht unbedingt der Fall.

Die javadoc for Queue Zustände:

Queues typischerweise, aber nicht notwendigerweise, um Elemente in einem FIFO (first-in-first-out) Art und Weise. Zu den Ausnahmen gehören Prioritätswarteschlangen, die Elemente nach einem zugeführten Vergleicher oder nach der natürlichen Reihenfolge der Elemente ordnen, und LIFO-Warteschlangen (oder Stapel), die die Elemente LIFO (last-in-first-out) anordnen.

Es fügt auch:

Jede Queue Implementierung seiner Bestellung Eigenschaften angeben müssen.

Sie müssen also nur das Javadoc der spezifischen Warteschlange überprüfen, die Sie verwenden, und Sie sollten Ihre Antwort finden.

+0

Ich habe meine Warteschlange wie folgt definiert: 'Warteschlange Warteschlange = neu LinkedList '. Würde dies so funktionieren, wie ich es vorhabe, wenn ich den obigen Code verwenden würde? Da es keine 'Prority Queue' ist. Danke –

+0

LinkedList implementiert auch Deque, die FIFO ist. Ihre Iterationsreihenfolge entspricht also der Einfügereihenfolge (wenn Sie 1 und dann 2 eingeben, werden Sie beim Iterieren 1 und dann 2 lesen). – assylias

+0

Das ist großartig. Danke für deine Hilfe assylias. –

0

Ich denke, es ist besser, ArrayList in diesem Fall zu verwenden. Bitte versuchen Sie es. Warum möchten Sie nur die Warteschlange verwenden?

+0

Schulen erfordern manchmal die Verwendung von Warteschlangen in Projekten. Ich kenne. Furchtbar. – Kelmikra

+1

Wenn Sie eine FIFO-Datenstruktur (first in first out) benötigen, ist eine Warteschlange die geeignete Wahl für eine ArrayList. Der Grund dafür, dass eine ArrayList möglicherweise keine geeignete Datenstruktur ist, liegt daran, dass ein anderer Entwickler (oder Sie selbst, wenn Sie vergessen haben, dass Sie FIFO benötigen) Code schreiben könnte, um Elemente aus der Mitte der ArrayList zu entfernen, die die FIFO-Datenstruktur beeinträchtigen würden das war ursprünglich erforderlich. Sie könnten natürlich eine ArrayList als FIFO-Datenstruktur verwenden, die jedoch vom Entwickler und nicht vom ausgewählten Datentyp erzwungen werden müsste. –

6

Implementieren Sie Ihre Warteschlange als LinkedList. Dann können Sie über Ihre Objekte iterieren, in der Reihenfolge, in der sie eingefügt wurden. Sie müssen den Objekttyp angeben, der in die Warteschlange eingefügt wird, damit keine Fehler auftreten. Sie können es als Objekt behalten und es als eine Warteschlange von Objekten spezifizieren, dann würde Ihr Code oben funktionieren. Siehe unten.

Queue<Object> queue = new LinkedList<Object>(); 
// add your objects here 
// EX: queue.add(new MyObject) 

for(Object item : queue){ 
    System.out.println(item.toString()); 
} 
Verwandte Themen