Structure de Données Deque en Java
File d’attente à double extrémité
Deque, ou file d’attente à double extrémité, permet de manipuler les files d’attente à la fois par l’avant et par l’arrière.
L’interface Deque étend l’interface Queue, ainsi une classe comme LinkedList implémente également cette interface.
Par conséquent, vous utiliserez à nouveau LinkedList, mais cette fois-ci avec une nouvelle interface.
Déclarer un objet de type Deque ne diffère pas de Queue :
Main.java
1Deque<T> deque = new LinkedList<>();
La principale différence apparaît lorsque l’on examine les méthodes de cette interface.
Puisqu’un Deque est une file à double extrémité, ce qui signifie que l’on peut manipuler les éléments à la fois au début et à la fin de la file, ses méthodes sont adaptées à cette caractéristique.
Méthodes
Quelques méthodes clés de l’interface Deque sont :
addFirst(element): ajoute un élément au début du deque ;addLast(element): ajoute un élément à la fin du deque.
Il est évident que, dans un deque, il existe des méthodes pour ajouter au début et à la fin. Les noms de ces méthodes sont explicites. Examinons ces méthodes dans le code :
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }
Comme vous pouvez le constater, après avoir utilisé la méthode addFirst(), l’élément a été ajouté au début de la deque. Cela la distingue de la méthode addLast().
Deque possède également une méthode add() classique, qui fonctionne de la même manière que la méthode addLast(). Le choix de la méthode à utiliser vous appartient donc entièrement.
Méthodes de suppression
S’il existe des méthodes pour ajouter des éléments au début et à la fin, il doit également y avoir des méthodes pour supprimer du début et de la fin de la deque.
removeFirst(): supprime et retourne l’élément du début de la deque ;removeLast(): supprime et retourne l’élément de la fin de la deque.
Les méthodes addFirst() et addLast() effectuent la suppression des éléments du début et de la fin de la deque.
Examinons un exemple d’utilisation dans le code :
Main.java
1234567891011121314151617package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }
Comme vous pouvez le voir, nous avons supprimé le premier et le dernier élément de la deque, ne laissant que le deuxième élément.
C'est simple et pratique, et les noms des méthodes sont explicites.
Méthodes d'accès
Passons maintenant aux méthodes permettant d'accéder aux éléments d'une deque.
getFirst(): récupère, sans supprimer, l'élément situé en tête de la deque ;getLast(): récupère, sans supprimer, l'élément situé en fin de deque.
Cela permet d'accéder aux premier et dernier éléments d'une file doublement terminée.
Voyons maintenant un exemple en code :
Main.java
123456789101112131415161718package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }
En utilisant les méthodes getFirst() et getLast(), nous avons récupéré les premiers et derniers éléments de la deque et attribué ces valeurs à de nouvelles variables créées.
Dans l’interface Deque, il existe également les méthodes peekFirst() et peekLast(), qui résolvent le problème de la levée d’une exception. Au lieu de lancer une exception et d’arrêter le programme, elles renvoient null si la file est vide.
Examinons un exemple :
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }
À partir de cet exemple, il est devenu évident qu’il est bien préférable d’utiliser les méthodes peekFirst() et peekLast() au lieu de getFirst() et getLast(), car elles n’interrompent pas le programme en cas d’erreur.
Cependant, il ne faut pas oublier l’exception NullPointerException ! Cette exception peut causer de nombreux problèmes dans votre programme.
Il existe également des méthodes alternatives équivalentes pour les méthodes addFirst(), addLast(), removeFirst() et removeLast(). Nous n’allons pas nous attarder dessus, car vous comprenez déjà le fonctionnement de ces méthodes, mais voici la liste :
Méthodes alternatives
Méthodes pour ajouter un élément à la deque :
offerFirst(E e): ajoute un élément au début de la deque, si possible, et retournetrue. Retournefalsesi l’ajout n’est pas possible ;offerLast(E e): ajoute un élément à la fin de la deque, si possible, et retournetrue. Retournefalsesi l’ajout n’est pas possible ;push(E e): ajoute un élément au début de la deque, similaire àaddFirst(). À noter quepush()est également une méthode de pile dans la classeDeque.
Méthodes pour supprimer un élément de la deque :
pollFirst(): supprime et retourne le premier élément de la deque. Retournenullsi la deque est vide ;pollLast(): supprime et retourne le dernier élément de la deque. Retournenullsi la deque est vide ;pop(): supprime et retourne le premier élément de la deque, similaire àremoveFirst().
Le choix dépend des exigences du programme. Il est toujours possible de tout résoudre avec un tableau classique, mais cela serait assez complexe et non optimisé. C’est pourquoi il existe autant de structures de données différentes — pour rendre l’écriture de divers programmes plus pratique.
1. Que signifie « Deque » ?
2. Quelle interface en Java représente une Deque ?
3. Quel est le but de la méthode addFirst() dans une Deque ?
4. Quelle méthode est utilisée pour récupérer, sans supprimer, le dernier élément d'une Deque ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
What are some real-world use cases for a Deque?
Can you explain the difference between a Deque and a regular Queue?
How do I choose between using addFirst/addLast and offerFirst/offerLast?
Génial!
Completion taux amélioré à 4
Structure de Données Deque en Java
Glissez pour afficher le menu
File d’attente à double extrémité
Deque, ou file d’attente à double extrémité, permet de manipuler les files d’attente à la fois par l’avant et par l’arrière.
L’interface Deque étend l’interface Queue, ainsi une classe comme LinkedList implémente également cette interface.
Par conséquent, vous utiliserez à nouveau LinkedList, mais cette fois-ci avec une nouvelle interface.
Déclarer un objet de type Deque ne diffère pas de Queue :
Main.java
1Deque<T> deque = new LinkedList<>();
La principale différence apparaît lorsque l’on examine les méthodes de cette interface.
Puisqu’un Deque est une file à double extrémité, ce qui signifie que l’on peut manipuler les éléments à la fois au début et à la fin de la file, ses méthodes sont adaptées à cette caractéristique.
Méthodes
Quelques méthodes clés de l’interface Deque sont :
addFirst(element): ajoute un élément au début du deque ;addLast(element): ajoute un élément à la fin du deque.
Il est évident que, dans un deque, il existe des méthodes pour ajouter au début et à la fin. Les noms de ces méthodes sont explicites. Examinons ces méthodes dans le code :
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }
Comme vous pouvez le constater, après avoir utilisé la méthode addFirst(), l’élément a été ajouté au début de la deque. Cela la distingue de la méthode addLast().
Deque possède également une méthode add() classique, qui fonctionne de la même manière que la méthode addLast(). Le choix de la méthode à utiliser vous appartient donc entièrement.
Méthodes de suppression
S’il existe des méthodes pour ajouter des éléments au début et à la fin, il doit également y avoir des méthodes pour supprimer du début et de la fin de la deque.
removeFirst(): supprime et retourne l’élément du début de la deque ;removeLast(): supprime et retourne l’élément de la fin de la deque.
Les méthodes addFirst() et addLast() effectuent la suppression des éléments du début et de la fin de la deque.
Examinons un exemple d’utilisation dans le code :
Main.java
1234567891011121314151617package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }
Comme vous pouvez le voir, nous avons supprimé le premier et le dernier élément de la deque, ne laissant que le deuxième élément.
C'est simple et pratique, et les noms des méthodes sont explicites.
Méthodes d'accès
Passons maintenant aux méthodes permettant d'accéder aux éléments d'une deque.
getFirst(): récupère, sans supprimer, l'élément situé en tête de la deque ;getLast(): récupère, sans supprimer, l'élément situé en fin de deque.
Cela permet d'accéder aux premier et dernier éléments d'une file doublement terminée.
Voyons maintenant un exemple en code :
Main.java
123456789101112131415161718package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }
En utilisant les méthodes getFirst() et getLast(), nous avons récupéré les premiers et derniers éléments de la deque et attribué ces valeurs à de nouvelles variables créées.
Dans l’interface Deque, il existe également les méthodes peekFirst() et peekLast(), qui résolvent le problème de la levée d’une exception. Au lieu de lancer une exception et d’arrêter le programme, elles renvoient null si la file est vide.
Examinons un exemple :
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }
À partir de cet exemple, il est devenu évident qu’il est bien préférable d’utiliser les méthodes peekFirst() et peekLast() au lieu de getFirst() et getLast(), car elles n’interrompent pas le programme en cas d’erreur.
Cependant, il ne faut pas oublier l’exception NullPointerException ! Cette exception peut causer de nombreux problèmes dans votre programme.
Il existe également des méthodes alternatives équivalentes pour les méthodes addFirst(), addLast(), removeFirst() et removeLast(). Nous n’allons pas nous attarder dessus, car vous comprenez déjà le fonctionnement de ces méthodes, mais voici la liste :
Méthodes alternatives
Méthodes pour ajouter un élément à la deque :
offerFirst(E e): ajoute un élément au début de la deque, si possible, et retournetrue. Retournefalsesi l’ajout n’est pas possible ;offerLast(E e): ajoute un élément à la fin de la deque, si possible, et retournetrue. Retournefalsesi l’ajout n’est pas possible ;push(E e): ajoute un élément au début de la deque, similaire àaddFirst(). À noter quepush()est également une méthode de pile dans la classeDeque.
Méthodes pour supprimer un élément de la deque :
pollFirst(): supprime et retourne le premier élément de la deque. Retournenullsi la deque est vide ;pollLast(): supprime et retourne le dernier élément de la deque. Retournenullsi la deque est vide ;pop(): supprime et retourne le premier élément de la deque, similaire àremoveFirst().
Le choix dépend des exigences du programme. Il est toujours possible de tout résoudre avec un tableau classique, mais cela serait assez complexe et non optimisé. C’est pourquoi il existe autant de structures de données différentes — pour rendre l’écriture de divers programmes plus pratique.
1. Que signifie « Deque » ?
2. Quelle interface en Java représente une Deque ?
3. Quel est le but de la méthode addFirst() dans une Deque ?
4. Quelle méthode est utilisée pour récupérer, sans supprimer, le dernier élément d'une Deque ?
Merci pour vos commentaires !