Co to jest kolejka?
Jak sama nazwa wskazuje, kolejka jest powszechną strukturą danych w Javie zgodną z kolejnością wstawiania FIFO (First In First Out) . Łatwo sobie to wyobrazić jako kolejkę w sklepie spożywczym. Im szybciej wejdziesz, tym szybciej wyjdziesz. Oznacza to, że element dodany wcześniej do kolejki również wcześniej ją opuści. Pierwszy element (przód) kolejki jest również nazywany head .
Czym jest metoda poll() Queue?
Metoda poll() umożliwia pobranie i usunięcie najwyższego elementu (nagłówka) kolejki. W naszym przykładzie, gdy wywołasz poll() w powyższej kolejce, otrzymasz jako wynik „1”. A w kolejce pozostaną tylko 4 elementy.
poll() metoda w Javie
Przykład 1
Spójrz na prosty przykład wywołania funkcji poll() w kolejce pokazanej na rysunku 1.0.
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");
}
}
Wyjście
Kolejka: [1, 2, 3, 4, 5, 6]
poll() zwróciła: 1
Kolejka zaktualizowana! [2, 3, 4, 5, 6]
poll() zwróciło : 2
Kolejka Zaktualizowano! [3, 4, 5, 6]
poll() zwróciło : 3
Kolejka zaktualizowana! [4, 5, 6]
Zwróć uwagę, że po każdym wywołaniu poll() rozmiar kolejki jest zmniejszany o 1 i zwracana jest głowa.
Przykład 2
Spójrzmy na inny przykład dni w tygodniu. Będziemy wywoływać poll() jeden po drugim w dni powszednie i zobaczyć, jak to wygląda.
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");
}
}
Wyjście
Dni tygodnia: [niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota]
poll() zwróciło: niedziela
Dni zaktualizowane! [Poniedziałek wtorek środa czwartek piątek sobota]
poll() zwróciło: poniedziałek
Dni zaktualizowane! [wtorek, środa, czwartek, piątek, sobota]
poll() zwróciło: wtorek
Dni zaktualizowane! [środa, czwartek, piątek, sobota]
Czym poll() różni się od peek() i remove()?
Początkującym bardzo łatwo jest połączyć trzy różne koncepcje, ponieważ wyglądają one dość podobnie. Niech „q” będzie kolejką, a oto czym się różnią:- q.poll() : usuwa i pobiera nagłówek kolejki
- q.peek() : nie usuwa, a jedynie pobiera/zwraca nagłówek kolejki
- q.remove() : usuwa i pobiera nagłówek kolejki
Przykład 3
Teraz rzućmy okiem na kilka przykładów powyższych trzech funkcji.
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());
}
}
Wyjście
Dni tygodnia: [niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota]
peek() zwróciło: niedziela
Dni tygodnia: [niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota]
peek() zwróciło: niedziela
Dni tygodnia: [niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota]
Remove() zwróciło: niedziela
Dni zaktualizowane! [Poniedziałek wtorek środa czwartek piątek sobota]
Remove() zwróciło: poniedziałek
Dni zaktualizowane! [wtorek, środa, czwartek, piątek, sobota]
Remove() zwróciło: wtorek
Remove() zwróciło: środa
Remove() zwróciło: czwartek
Remove() zwróciło: piątek
Dni zaktualizowane! [Sobota]
poll() zwróciło: sobota
Dni zaktualizowane! []
poll() zwróciło: null
Wyjątek w wątku „main” java.util.NoSuchElementException
w java.util.LinkedList.removeFirst(LinkedList.java:270)
w java.util.LinkedList.remove(LinkedList.java:685)
w QueuePollMethod.main (QueuePollMethod.java:48)
Jak widać po wywołaniu peek() dni tygodnia pozostają takie same. A ponieważ używamy remove() lub poll(), rozmiar kolejki zmniejsza się o 1 wraz ze zwróceniem głowy. Co więcej, wyjątek java.util.NoSuchElementException jest zgłaszany, gdy wywołujemy remove() w pustej kolejce, podczas gdy żaden taki wyjątek nie jest zgłaszany w przypadku użycia poll() .
GO TO FULL VERSION