CodeGym /Blog Java /Random-PL /Queue poll() Metoda w Javie z przykładami
Autor
Artem Divertitto
Senior Android Developer at United Tech

Queue poll() Metoda w Javie z przykładami

Opublikowano w grupie Random-PL

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 .Queue poll() Metoda w Javie z przykładami - 2
Rys. 1.0: Prosta kolejka w Javie

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.Queue poll() Metoda w Javie z przykładami - 3
Rys. 1.1: Po użyciu metody poll() w kolejce

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
Wygląda więc na to, że remove() i poll() są dokładnie takie same. Działają identycznie w normalnych warunkach. Ale kiedy kolejka jest pusta, remove() zgłasza wyjątek NoSuchElementException , podczas gdy poll zwraca null .

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

Wniosek

Mamy nadzieję, że do końca zapoznałeś się z użyciem i działaniem metody poll() kolejek. Jednak w przypadku jakichkolwiek nieporozumień zawsze możesz wrócić tutaj, aby się skonsultować. Szczęśliwego kodowania!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION