CodeGym /Java Blog /Random-IT /Metodo Queue poll() in Java con esempi
John Squirrels
Livello 41
San Francisco

Metodo Queue poll() in Java con esempi

Pubblicato nel gruppo Random-IT

Cos'è una coda?

Proprio come suggerisce il nome, Queue è una struttura di dati comune in Java che segue l'ordine di inserimento First In First Out (FIFO) . Puoi facilmente immaginarlo come una coda in un negozio di alimentari. Prima entri, prima esci. Significa che anche l'elemento aggiunto alla coda in precedenza partirà prima. Il primo elemento (anteriore) della coda è anche chiamato head .Metodo Queue poll() in Java con esempi - 2
Fig 1.0: Una semplice coda in Java

Qual è il metodo poll() di Queue?

Il metodo poll() consente di recuperare e rimuovere l'elemento più in alto (testa) di una coda. Nel nostro esempio, quando chiami poll() nella coda sopra, riceverai '1' come risultato. E rimarranno solo 4 elementi in coda.Metodo Queue poll() in Java con esempi - 3
Fig 1.1: Dopo aver usato il metodo poll() su una coda

metodo poll() in Java

Esempio 1

Dai un'occhiata a un semplice esempio di chiamata della funzione poll() sulla coda mostrata nella figura 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");        
	}
}
Produzione
Coda: [1, 2, 3, 4, 5, 6] poll() ha restituito: 1 Coda Aggiornata! [2, 3, 4, 5, 6] poll() ha restituito: 2 Coda aggiornata! [3, 4, 5, 6] poll() ha restituito: 3 Coda aggiornata! [4, 5, 6]
Si noti che dopo ogni chiamata poll() la dimensione della coda viene ridotta di 1 e viene restituito head.

Esempio 2

Diamo un'occhiata a un altro esempio di giorni in una settimana. Chiameremo poll() uno per uno nei giorni feriali e vedremo come appare.

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");                   
	}
}
Produzione
Giorni della settimana: [domenica, lunedì, martedì, mercoledì, giovedì, venerdì, sabato] poll() restituito: giorni della domenica aggiornati! [lunedì, martedì, mercoledì, giovedì, venerdì, sabato] poll() ha restituito: lunedì giorni aggiornati! [Tuesday, Wednesday, Thursday, Friday, Saturday] poll() ha restituito: Tuesday Days Updated! [mercoledì, giovedì, venerdì, sabato]

In che modo poll() è diverso da peek() e remove()?

È molto facile per i principianti mescolare i tre diversi concetti poiché sembrano abbastanza simili. Diciamo che "q" è una coda, quindi ecco come sono diversi:
  • q.poll() : rimuove e recupera l'inizio della coda
  • q.peek() : non rimuove ma recupera/restituisce solo l'inizio della coda
  • q.remove() : rimuove e recupera l'inizio della coda
Quindi sembra che remove() e poll() siano esattamente gli stessi. Funzionano allo stesso modo in circostanze normali. Ma quando la coda è vuota, remove() genera NoSuchElementException , mentre poll restituisce null .

Esempio 3

Ora diamo una rapida occhiata ad alcuni esempi delle tre funzioni precedenti.

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

	}
}
Produzione
Giorni della settimana: [domenica, lunedì, martedì, mercoledì, giovedì, venerdì, sabato] peek() restituito: giorni della settimana della domenica: [domenica, lunedì, martedì, mercoledì, giovedì, venerdì, sabato] peek() restituito: giorni della settimana della domenica : [Domenica, lunedì, martedì, mercoledì, giovedì, venerdì, sabato] remove() ha restituito: Sunday Days Updated! [lunedì, martedì, mercoledì, giovedì, venerdì, sabato] remove() ha restituito: lunedì giorni aggiornati! [Tuesday, Wednesday, Thursday, Friday, Saturday] remove() restituito: martedì remove() restituito: mercoledì remove() restituito: giovedì remove() restituito: venerdì Giorni aggiornati! [Sabato] poll() ha restituito: Saturday Days Updated! [] poll() ha restituito: null Eccezione nel thread "principale" java.util.NoSuchElementException in java.util.LinkedList.removeFirst(LinkedList.java:270) in java.util.LinkedList.remove(LinkedList.java:
Come puoi vedere dopo aver chiamato peek(), i giorni della settimana rimangono gli stessi. E mentre usiamo remove() o poll() la dimensione della coda viene ridotta di 1 insieme alla restituzione della testa. Inoltre, java.util.NoSuchElementException viene lanciata quando chiamiamo remove() su una coda vuota, mentre nessuna eccezione di questo tipo viene lanciata per l'utilizzo di poll() .

Conclusione

Alla fine, speriamo che tu abbia familiarità con l'uso e il funzionamento del metodo poll() di Queues. Tuttavia, in caso di confusione, puoi sempre tornare qui per consultare. Buona codifica!
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION