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() .