Guide to Apache Commons CircularFifoQueue

Guide d'Apache Commons CircularFifoQueue

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons examiner la structure de donnéesCircularFifoQueue fournie dans le packagecollections4.queue de la bibliothèque Apache Commons Collections.

CircularFifoQueue<E> implémente l'interfaceQueue<E> et est unfixed-size,non-blocking queue -when you add an element to a queue that is full, the oldest element is removed to make room for the new element.

2. Dépendance Maven

Pour les projets Maven, nous devons ajouter la dépendance requise:


    org.apache.commons
    commons-collections4
    4.1

Vous pouvez trouver la dernière version de cette bibliothèque surMaven Central.

3. Constructeurs

Pour créer un objetCircularFifoQueue, nous pouvons utiliser le constructeur par défaut, qui crée une file d'attente avec la taille par défaut de 32:

CircularFifoQueue bits = new CircularFifoQueue();

Si nous connaissons la taille maximale souhaitée de notre file d'attente, nous pouvons utiliser le constructeur qui prend unint comme argument pour spécifier la taille:

CircularFifoQueue colors = new CircularFifoQueue<>(5);

Il existe également une option pour créer un objetCircularFifoQueue en donnant au constructeur une collection comme argument.

Dans ce cas, la file d'attente sera remplie avec les éléments de la collection et sa taille sera identique à celle de la collection:

CircularFifoQueue daysOfWeek = new CircularFifoQueue<>(days);

Remarque: étant donné que cette file d'attente est déjà pleine lors de sa construction, tout ajout entraînera l'élimination du premier élément créé.

4. Ajout d'éléments

Comme pour toute implémentation deQueue, nous pouvons ajouter des éléments en utilisant les méthodesadd etoffer. LeQueue JavaDoc spécifie que la méthodeoffer est destinée à être utilisée lors du fonctionnement avec une file d'attente dont la capacité est limitée.

Cependant, puisque leCircularFifoQueue est non bloquant, les insertions ne peuvent pas échouer. Par conséquent, ses méthodesadd etoffer présentent le même comportement.

Voyons comment ajouter des éléments à notre file d’attentecolors en utilisant la méthodeadd:

colors.add("Red");
colors.add("Blue");
colors.add("Green");

Et ajoutons quelques éléments en utilisant la méthodeoffer:

colors.offer("White");
colors.offer("Black");

5. Suppression et récupération d'éléments

La classeCircularFifoQueue nous offre quelques méthodes qui peuvent être utiles lorsque nous devons manipuler les éléments de la file d'attente. Certaines méthodes sont utilisées pour extraire des éléments de la file d'attente, d'autres pour supprimer des éléments et d'autres pour effectuer les deux opérations en même temps.

5.1. MéthodePeek

La méthodepeek est non destructive etreturns the head of the queue.

Cette méthode renverra toujours le même élément tant qu’il n’y aura pas de modification des éléments de la file d’attente entre les appels. If the queue is empty, peek will return null:

String colorsHead = colors.peek();

5.2. MéthodeElement

La méthodeelement est similaire àpeek - itreturns the current head of the queue.

Cependant, la méthodeelement lève une exception si la file d'attente est vide:

colorsHead = colors.element();

5.3. MéthodeGet

Lorsque nous avons besoin d'obtenir un certain élément de la file d'attente, nous pouvons utiliser la méthodeget. Cette méthode prend l'index de l'élément souhaité en argument. L'index de la file d'attente est basé sur zéro.

Récupérons un élément de la file d'attentecolors que nous avons rempli avec des éléments plus tôt:

String color = colors.get(1);

Cela renverra «Blue».

Ajoutons maintenant trois éléments à notre file d'attente et vérifions à nouveau ce résultat:

colors.add("Orange");
colors.add("Violet");
colors.add("Pink");

color = colors.get(1);

Cette fois, la méthodeget renvoie «Black». En effet, notre file d'attente a été créée avec une taille limitée à cinq et les trois premiers éléments ("Red", "Blue", "Green") ont été supprimés avec l'ajout de les nouvelles.

5.4. MéthodePoll

La méthodepollremoves the head element of the queue and returns that element. Si la file d'attente ne contient aucun élément, la méthodepoll renvoienull:

colorsHead = colors.poll();

5.5. MéthodeRemove

The remove methodoperates much like the poll method - il renvoie la tête de la file d'attente et supprime l'élément renvoyé. Cependant, if the queue is empty, remove will throw an exception:

colorsHead = colors.remove();

5.6. MéthodeClear

Nous pouvons utiliser la méthodeclear lorsque nous voulons vider notre file d'attente:

colors.clear();

6. Vérification des méthodes

Après avoir vu comment nous pouvons ajouter, supprimer et récupérer des éléments de la file d'attente, voyons ce que la classe a à offrir concernant la vérification de sa taille et de sa capacité. Nous allons utiliser les files d'attente créées dans les sections précédentes de nos exemples.

En général, nous disposons de deux méthodes pour vérifier la taille de notre file d'attente: une pour obtenir la taille maximale de l'objet et une pour vérifier le nombre d'éléments en cours.

La méthodemaxSize renverra une valeurinteger de la taille maximale de la file d'attente:

int maxSize = bits.maxSize();

Cela renverra32, car la file d'attentebits a été créée avec le constructeur par défaut.

La méthodesize retournera le nombre d'éléments actuellement stockés dans la file d'attente:

int size = colors.size();

Pour vérifier la capacité de l'objet queue, nous pouvons utiliser les méthodesisEmpty etisAtFullCapacity.

La méthodeisEmpty renverra une valeurboolean qui indique si la file d'attente est vide ou non:

boolean isEmpty = bits.isEmpty();

Pour vérifier si notre file d'attente est pleine, nous pouvons utiliserthe isAtFullCapacity method. Cette méthodereturns true only if the maximum size of elements in the queue has been reached:

boolean isFull = daysOfWeek.isAtFullCapacity();

Vous devez noter que cette méthode estavailable as of version 4.1.

Une autre méthode de l'interfaceQueue que nous pouvons utiliser pour vérifier si notre file d'attente est pleine est la méthodeisFull. PourCircularFifoQueue,the isFull method will always return false, because the queue can always accept new elements:

boolean isFull = daysOfWeek.isFull();

7. Conclusion

Dans cet article, nous avons vu comment utiliser Apache CommonsCircularFifoQueue. Nous avons vu quelques exemples illustrant comment instancier un objet de file d'attente, comment le remplir, comment le vider, comment obtenir et supprimer des éléments et comment vérifier sa taille et sa capacité.

Vous pouvez trouver l'exemple de code complet utilisé dans cet article dans nosGitHub project. Ceci est un projet Maven, vous devriez donc pouvoir l’importer et le lancer tel quel.