Ich benötige eine einfache FIFO-implementierte Warteschlange zum Speichern einer Reihe von Ints (es macht mir nicht viel aus, wenn es sich um eine generische Implementierung handelt).
Etwas, das schon für mich in der java.util
Trove / Guava-Bibliothek gebacken wurde ?
java
collections
queue
Rajat Gupta
quelle
quelle
Antworten:
Ja. Warteschlange
LinkedList ist die trivialste konkrete Implementierung.
quelle
LinkedList
LinkedList
ist keine Schnittstelle; Es ist eine explizite Klasse. AlternativArrayDeque
ist häufig schneller.Hier ist ein Beispielcode für die Verwendung der in Java integrierten FIFO-Warteschlange:
public static void main(String[] args) { Queue<Integer> myQ = new LinkedList<Integer>(); myQ.add(1); myQ.add(6); myQ.add(3); System.out.println(myQ); // 1 6 3 int first = myQ.poll(); // retrieve and remove the first element System.out.println(first); // 1 System.out.println(myQ); // 6 3 }
quelle
ArrayDeque
ist wahrscheinlich die schnellste objektbasierte Warteschlange im JDK; Trove hat dieTIntQueue
Schnittstelle, aber ich weiß nicht, wo die Implementierungen leben.quelle
ArrayDeque
als Warteschlange (FIFO) und nicht als Stapel (LIFO) zu fungieren, sollten Sieadd
und verwendenremove
. Wenn Siepush
und verwendenpop
, verhält es sich wie ein Stapel. (Genau genommenremove
undpop
sind die gleichen, aber daadd/pop
oderpush/remove
nicht gut als Paare klingen, gehen wir mitadd/remove
undpush/pop
.)Queue
ist eine Schnittstelle, dieCollection
in Java erweitert wird. Es verfügt über alle Funktionen, die zur Unterstützung derFIFO
Architektur erforderlich sind .Für die konkrete Umsetzung können Sie verwenden
LinkedList
. LinkedList implementiert,Deque
was wiederum implementiertQueue
. All dies ist Teil desjava.util
Pakets.Einzelheiten zur Methode mit Beispielbeispiel finden Sie in der FIFO-basierten Warteschlangenimplementierung in Java .
PS: Der obige Link führt zu meinem persönlichen Blog, der zusätzliche Details dazu enthält.
quelle
Eine LinkedList kann als Warteschlange verwendet werden - Sie müssen sie jedoch richtig verwenden. Hier ist ein Beispielcode:
@Test public void testQueue() { LinkedList<Integer> queue = new LinkedList<>(); queue.add(1); queue.add(2); System.out.println(queue.pop()); System.out.println(queue.pop()); }
Ausgabe :
1 2
Denken Sie daran , wenn Sie Push anstelle von Add verwenden (was Sie sehr wahrscheinlich intuitiv tun werden), wird dadurch ein Element am Anfang der Liste hinzugefügt, sodass es sich wie ein Stapel verhält.
Versuche dies :
@Test public void testQueue() { LinkedList<Integer> queue = new LinkedList<>(); queue.push(1); queue.push(2); System.out.println(queue.pop()); System.out.println(queue.pop()); }
Ausgabe :
2 1
quelle