Warteschlange erstellen mit LinkedList ?

Blizzsnake80

Mitglied
Hallo zusammen,

ist es korrekt eine LinkedList zu nutzen, wenn ich eine Warteschlange (nach dem FIFO-Prinzip) erstellen will ?

LinkedList<Integer> warteschlange = new LinkedList();

Nehmen wir einmal an, ich befülle die Liste mit vielen Ganzzahlen (als Knoten) und möchte nun im Rahmen einer Breitensuche immer den ältesten, sprich den ältesten Knoten entnehmen, dann ist das doch irgendwie falsch.

Die Methode remove() liefert mir doch dann immer den ersten Knoten auf der Liste, also den Knoten, den ich als letztes eingefügt hab und nicht als erstes, oder ?
 
Was du willst, ist Deque (double-ended queue) und LinkedList implementiert auch Deque. Und damit bekommst du auch removeLast().

EDIT: oder, wie mrBrown sagt, noch besser Queue nehmen. 🙂
 
Wow, danke für die schnellen Antworten.
Ich habe das gerade nochmal getestet:

LinkedList<Integer> w = new LinkedList();
w.add(4);
w.add(5);
w.add(6);
Iterator<Integer> it = w.iterator();
while(it.hasNext()) {
int s = it.next();
System.out.println(s);
}
System.out.println(w.remove());
Füge 4, 5,6 hinzu.... removen tut er als "Erstes" Element aber die 4 und damit ja tatsächlich das Element dass am Längsten in der Schlange war.
 
Ich dachte in einer Liste wird immer "vorne" angefügt. Damit hätte ich auch quasi erwartet dass ich dann eher 6,5,4 herausbekomme.
Also vom letzthinzugefügten bis zum Ende der Schlange.
 
Du hast ja auch weder eine Queue Implementierung verwendet, noch removeLast()...
Also: Du hast gar nichts von den vorgeschlagenen Lösungen umgesetzt.
In einer Liste wird immer hinten angefügt. Also List.add() fügt immer ans Ende an. List.remove() hingegen entfernt immer das erste Element.
Und genau das wäre dann ja auch FIFO (first-in first-out). Also, du hast als erstes die 4 in die Liste getan, also bekommst du mit remove() auch die 4 als erstes heraus.
 
Du hast ja auch weder eine Queue Implementierung verwendet, noch removeLast()...
Also: Du hast gar nichts von den vorgeschlagenen Lösungen umgesetzt.
In einer Liste wird immer hinten angefügt. Also List.add() fügt immer ans Ende an. List.remove() hingegen entfernt immer das erste Element.
Und genau das wäre dann ja auch FIFO (first-in first-out). Also, du hast als erstes die 4 in die Liste getan, also bekommst du mit remove() auch die 4 als erstes heraus.
Ja, das stimmt. Ich wollte aber erst einmal ausprobieren und nachvollziehen was remove() macht.
Nochmals Vielen Dank für die Tipps.
 
Zuletzt bearbeitet:

Zurück
Oben