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 .
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 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
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() .
GO TO FULL VERSION