Maîtriser Java ArrayDeque : Guide Complet et Implémentation de Pile
Java ArrayDeque
Ce guide explique la classe ArrayDeque, ses méthodes et des exemples pratiques – y compris comment l'utiliser comme pile.
En Java, ArrayDeque implémente les structures de données file et deque appuyées par un tableau redimensionnable.
Interfaces Implémentées par ArrayDeque
La classe ArrayDeque implémente les interfaces suivantes :
- Interface Java Queue
- Interface Java Deque
Création d'un ArrayDeque
Importez d'abord le package :
import java.util.ArrayDeque;
Instanciez un deque typé :
ArrayDeque<Type> deque = new ArrayDeque<>();
Exemples :
// Deque de chaînes
ArrayDeque<String> animals = new ArrayDeque<>();
// Deque d'entiers
ArrayDeque<Integer> ages = new ArrayDeque<>();
Méthodes Clés d'ArrayDeque
Insertion d'Éléments
1. Utilisation de add(), addFirst(), addLast()
add(E e)– ajouteeà la fin.addFirst(E e)– insèreeau début.addLast(E e)– équivalent àadd().
Note : Si le deque est plein, ces méthodes lèvent IllegalStateException.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.addFirst("Cat");
animals.addLast("Horse");
System.out.println("ArrayDeque: " + animals);
Sortie
ArrayDeque: [Cat, Dog, Horse]
2. Utilisation de offer(), offerFirst(), offerLast()
offer(E e)– ajouteeà la fin, retournetrueen cas de succès.offerFirst(E e)– insèreeau début.offerLast(E e)– identique àoffer().
Note : Ces méthodes retournent false si le deque est plein.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.offer("Dog");
animals.offerFirst("Cat");
animals.offerLast("Horse");
System.out.println("ArrayDeque: " + animals);
Sortie
ArrayDeque: [Cat, Dog, Horse]
Accès aux Éléments
1. getFirst() et getLast()
getFirst()– retourne l'élément du début.getLast()– retourne l'élément de la fin.
Note : Lève NoSuchElementException si le deque est vide.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Premier Élément: " + animals.getFirst());
System.out.println("Dernier Élément: " + animals.getLast());
Sortie
ArrayDeque: [Dog, Cat, Horse] Premier Élément: Dog Dernier Élément: Horse
2. peek(), peekFirst(), peekLast()
peek()– récupère sans supprimer la tête.peekFirst()– synonyme depeek().peekLast()– récupère la fin.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Élément Tête: " + animals.peek());
System.out.println("Premier Élément: " + animals.peekFirst());
System.out.println("Dernier Élément: " + animals.peekLast());
Sortie
ArrayDeque: [Dog, Cat, Horse] Élément Tête: Dog Premier Élément: Dog Dernier Élément: Horse
Note : Si le deque est vide, peek() et ses variantes retournent null au lieu de lever une exception.
Suppression d'Éléments
1. remove(), removeFirst(), removeLast()
remove()– supprime et retourne la tête.removeFirst()– identique àremove().removeLast()– supprime et retourne la fin.remove(Object o)– supprime la première occurrence deosi présente.
Note : Lève NoSuchElementException si le deque est vide ou si remove(o) ne trouve pas o.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Élément Supprimé: " + animals.remove());
System.out.println("Nouveau ArrayDeque: " + animals);
System.out.println("Premier Élément Supprimé: " + animals.removeFirst());
System.out.println("Dernier Élément Supprimé: " + animals.removeLast());
Sortie
ArrayDeque: [Dog, Cat, Cow, Horse] Élément Supprimé: Dog Nouveau ArrayDeque: [Cat, Cow, Horse] Premier Élément Supprimé: Cat Dernier Élément Supprimé: Horse
2. poll(), pollFirst(), pollLast()
poll()– supprime et retourne la tête, ounullsi vide.pollFirst()– synonyme depoll().pollLast()– supprime et retourne la fin.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Élément Supprimé: " + animals.poll());
System.out.println("Nouveau ArrayDeque: " + animals);
System.out.println("Premier Élément Supprimé: " + animals.pollFirst());
System.out.println("Dernier Élément Supprimé: " + animals.pollLast());
Sortie
ArrayDeque: [Dog, Cat, Cow, Horse] Élément Supprimé: Dog Nouveau ArrayDeque: [Cat, Cow, Horse] Premier Élément Supprimé: Cat Dernier Élément Supprimé: Horse
3. clear()
Vide entièrement le deque.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
animals.clear();
System.out.println("Nouveau ArrayDeque: " + animals);
Sortie
ArrayDeque: [Dog, Cat, Horse] Nouveau ArrayDeque: []
Itération sur un ArrayDeque
iterator()– itérateur avant.descendingIterator()– itérateur inverse.
ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.print("ArrayDeque: ");
Iterator<String> it = animals.iterator();
while(it.hasNext()) {
System.out.print(it.next() + ", ");
}
System.out.print("\nArrayDeque dans l'ordre inverse: ");
Iterator<String> rev = animals.descendingIterator();
while(rev.hasNext()) {
System.out.print(rev.next() + ", ");
}
Sortie
ArrayDeque: [Dog, Cat, Horse] ArrayDeque dans l'ordre inverse: [Horse, Cat, Dog]
Autres Méthodes Courantes
| Méthode | Description |
|---|---|
element() | Récupère sans supprimer la tête. |
contains(Object o) | Vérifie la présence de o ; retourne true si trouvé. |
size() | Nombre d'éléments dans le deque. |
toArray() | Convertit le deque en tableau. |
clone() | Crée une copie superficielle du deque. |
Utilisation d'ArrayDeque comme Pile (Stack)
Pour un comportement LIFO, ArrayDeque est préférable à Stack grâce à de meilleures performances et sans surcharge de synchronisation legacy.
Méthodes style pile :
push(E e)– ajoute au début.peek()– récupère l'élément du sommet sans suppression.pop()– supprime et retourne l'élément du sommet.
ArrayDeque<String> stack = new ArrayDeque<>();
stack.push("Dog");
stack.push("Cat");
stack.push("Horse");
System.out.println("Stack: " + stack);
System.out.println("Élément Accédé: " + stack.peek());
System.out.println("Élément Supprimé: " + stack.pop());
Sortie
Stack: [Horse, Cat, Dog] Élément Accédé: Horse Élément Supprimé: Horse
ArrayDeque vs LinkedList
Les deux implémentent Deque, mais diffèrent :
LinkedListautorise les élémentsnull;ArrayDequene les autorise pas.- Les nœuds LinkedList stockent des pointeurs, consommant plus de mémoire.
- Pour les charges de travail file/deque,
ArrayDequesurpasse généralementLinkedList.
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code