Was ist eine Warteschlange?
Wie der Name schon sagt, ist Queue eine in Java übliche Datenstruktur, die der FIFO-Einfügereihenfolge (First In First Out) folgt . Man kann es sich leicht wie eine Warteschlange in einem Lebensmittelgeschäft vorstellen. Je früher Sie eintreten, desto eher gehen Sie. Dies bedeutet, dass das zuvor zur Warteschlange hinzugefügte Element auch früher verlassen wird. Das erste Element (vorne) der Warteschlange wird auch head genannt .
Was ist die poll()-Methode von Queue?
Mit der Methode poll() können Sie das oberste Element (Kopf) einer Warteschlange abrufen und entfernen. Wenn Sie in unserem Beispiel poll() in der obigen Warteschlange aufrufen, erhalten Sie als Ergebnis „1“. Und es bleiben nur noch 4 Elemente in der Warteschlange.
poll()-Methode in Java
Beispiel 1
Schauen Sie sich ein einfaches Beispiel für den Aufruf der poll() -Funktion in der in Abbildung 1.0 gezeigten Warteschlange an.
import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
// create a queue of die rolls
Queue dieRoll = new LinkedList();
// Add 6 integers one by one
dieRoll.add(1);
dieRoll.add(2);
dieRoll.add(3);
dieRoll.add(4);
dieRoll.add(5);
dieRoll.add(6);
// print the original queue
System.out.println("Queue:\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
}
}
Ausgang
Warteschlange: [1, 2, 3, 4, 5, 6]
poll() zurückgegeben: 1
Warteschlange aktualisiert! [2, 3, 4, 5, 6]
poll() zurückgegeben: 2
Warteschlange aktualisiert! [3, 4, 5, 6]
poll() zurückgegeben: 3
Warteschlange aktualisiert! [4, 5, 6]
Bitte beachten Sie, dass nach jedem poll() -Aufruf die Größe der Warteschlange um 1 reduziert wird und der Kopf zurückgegeben wird.
Beispiel 2
Schauen wir uns ein weiteres Beispiel für Tage in einer Woche an. Wir rufen poll() nacheinander an Wochentagen auf und sehen, wie es aussieht.
import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
Queue days = new LinkedList();
days.add("Sunday");
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
// print all the days in the week
System.out.println("Week Days: \t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
}
}
Ausgang
Wochentage: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
poll() zurückgegeben: Sonntagstage
aktualisiert! [Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
poll() zurückgegeben: Montagstage
aktualisiert! [Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
poll() zurückgegeben: Dienstagstage
aktualisiert! [Mittwoch, Donnerstag, Freitag, Samstag]
Wie unterscheidet sich poll() von peek() und remove()?
Für Anfänger ist es sehr einfach, die drei verschiedenen Konzepte zu verwechseln, da sie ziemlich ähnlich aussehen. Lassen Sie uns „q“ eine Warteschlange sein, dann sind sie wie folgt unterschiedlich:- q.poll() : Entfernt den Kopf der Warteschlange und ruft ihn ab
- q.peek() : Entfernt nicht, sondern ruft nur den Kopf der Warteschlange ab bzw. gibt ihn zurück
- q.remove() : Entfernt den Kopf der Warteschlange und ruft ihn ab
Beispiel 3
Werfen wir nun einen kurzen Blick auf einige Beispiele der oben genannten drei Funktionen.
import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
Queue days = new LinkedList();
days.add("Sunday");
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
// print all the days in the week
System.out.println("Week Days: \t" + days + "\n");
// after calling peek()
System.out.println("peek() returned: " + days.peek());
System.out.println("Week Days: \t" + days + "\n");
System.out.println("peek() returned: " + days.peek());
System.out.println("Week Days: \t" + days + "\n");
// after calling remove()
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("poll() returned: " + days.poll());
System.out.println("remove() returned: " + days.remove());
}
}
Ausgang
Wochentage: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
peek() zurückgegeben: Sonntag
Wochentage: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
peek() zurückgegeben: Sonntag
Wochentage : [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
remove() zurückgegeben: Sonntagstage
aktualisiert! [Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
Remove() zurückgegeben: Montag
Tage aktualisiert! [Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
Remove() zurückgegeben: Dienstag
Remove() zurückgegeben: Mittwoch
Remove() zurückgegeben: Donnerstag
Remove() zurückgegeben: Freitag
Tage aktualisiert! [Samstag]
poll() zurückgegeben: Samstagstage
aktualisiert! []
poll() zurückgegeben: null
Ausnahme im Thread „main“ java.util.NoSuchElementException
bei java.util.LinkedList.removeFirst(LinkedList.java:270)
bei java.util.LinkedList.remove(LinkedList.java:685)
bei QueuePollMethod.main(QueuePollMethod.java:48)
Wie Sie nach dem Aufruf von peek() sehen können, bleiben die Wochentage gleich. Und wenn wir „remove()“ oder „poll()“ verwenden, wird die Größe der Warteschlange um 1 reduziert und gleichzeitig der Kopf zurückgegeben. Darüber hinaus wird java.util.NoSuchElementException ausgelöst, wenn wir „remove()“ in einer leeren Warteschlange aufrufen, während bei der Verwendung von poll() keine solche Ausnahme ausgelöst wird .
GO TO FULL VERSION