CodeGym /Blog Java /Random-FR /Méthode de file d'attente poll () en Java avec des exempl...
Auteur
Artem Divertitto
Senior Android Developer at United Tech

Méthode de file d'attente poll () en Java avec des exemples

Publié dans le groupe Random-FR

Qu'est-ce qu'une file d'attente ?

Comme son nom l'indique, Queue est une structure de données courante en Java suivant l'ordre d'insertion First In First Out (FIFO) . Vous pouvez facilement l'imaginer comme une file d'attente dans une épicerie. Plus tôt vous entrez, plus tôt vous partez. Cela signifie que l'élément ajouté à la file d'attente plus tôt partira également plus tôt. Le premier élément (front) de la file d'attente est également appelé head .Méthode Queue poll() en Java avec exemples - 2
Fig 1.0 : Une file d'attente simple en Java

Qu'est-ce que la méthode poll() de Queue ?

La méthode poll() vous permet de récupérer et de supprimer l'élément le plus haut (tête) d'une file d'attente. Dans notre exemple, lorsque vous appelez poll() dans la file d'attente ci-dessus, vous recevez '1' en conséquence. Et il ne restera que 4 éléments dans la file d'attente.Méthode Queue poll() en Java avec exemples - 3
Fig 1.1 : Après avoir utilisé la méthode poll() sur une file d'attente

méthode poll() en Java

Exemple 1

Jetez un œil à un exemple simple d'appel de la fonction poll() sur la file d'attente illustrée à la figure 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");        
	}
}
Sortir
File d'attente : [1, 2, 3, 4, 5, 6] poll() a renvoyé : 1 file d'attente mise à jour ! [2, 3, 4, 5, 6] poll() a renvoyé : 2 file d'attente mise à jour ! [3, 4, 5, 6] poll() a renvoyé : 3 file d'attente mise à jour ! [4, 5, 6]
Veuillez noter qu'après chaque appel poll(), la taille de la file d'attente est réduite de 1 et que head est renvoyé.

Exemple 2

Regardons un autre exemple de jours dans une semaine. Nous appellerons poll() un par un les jours de semaine et verrons à quoi cela ressemble.

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");                   
	}
}
Sortir
Jours de la semaine : [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi] poll() a renvoyé : dimanche jours mis à jour ! [Lundi, mardi, mercredi, jeudi, vendredi, samedi] poll() a renvoyé : lundi Jours mis à jour ! [Mardi, Mercredi, Jeudi, Vendredi, Samedi] poll() a renvoyé : mardi Jours mis à jour ! [mercredi, jeudi, vendredi, samedi]

En quoi poll() est-il différent de peek() et remove() ?

Il est très facile pour les débutants de mélanger les trois concepts différents car ils se ressemblent beaucoup. Soit "q" une file d'attente, alors voici comment ils sont différents :
  • q.poll() : supprime et récupère la tête de la file d'attente
  • q.peek() : ne supprime pas mais récupère/renvoie uniquement la tête de la file d'attente
  • q.remove() : supprime et récupère la tête de la file d'attente
Il semble donc que remove() et poll() soient exactement les mêmes. Ils fonctionnent de manière identique dans des circonstances normales. Mais lorsque la file d'attente est vide, remove() lève NoSuchElementException , tandis que poll renvoie null .

Exemple 3

Voyons maintenant quelques exemples des trois fonctions ci-dessus.

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

	}
}
Sortir
Jours de la semaine : [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi] peek() a renvoyé : dimanche jours de la semaine : [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi] peek() a renvoyé : dimanche jours de la semaine : [Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi] remove() a renvoyé : dimanche Days Mis à jour ! [Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi] remove() a renvoyé : lundi Days Updated ! [mardi, mercredi, jeudi, vendredi, samedi] remove() a renvoyé : mardi remove() a renvoyé : mercredi remove() a renvoyé : jeudi remove() a renvoyé : vendredi Jours mis à jour ! [Samedi] poll() a renvoyé : samedi à jour des jours du samedi ! [] poll() a renvoyé : null Exception dans le thread "principal" java.util.NoSuchElementException à java.util.LinkedList.removeFirst(LinkedList.java:270) à java.util.LinkedList.remove(LinkedList.java :
Comme vous pouvez le voir après avoir appelé peek(), les jours de la semaine restent les mêmes. Et comme nous utilisons remove () ou poll (), la taille de la file d'attente est réduite de 1 avec le retour de la tête. De plus, java.util.NoSuchElementException est levée lorsque nous appelons remove() dans une file d'attente vide, alors qu'aucune exception de ce type n'est levée pour l'utilisation de poll() .

Conclusion

À la fin, nous espérons que vous êtes familiarisé avec l'utilisation et le fonctionnement de la méthode poll() des files d'attente. Cependant, en cas de confusion, vous pouvez toujours revenir ici pour consulter. Bon codage !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION