Classe Java Stack – Guide Complet d'Utilisation et de Méthodes
Classe Java Stack
Ce tutoriel explique la classe Stack de Java, ses méthodes principales et des exemples pratiques pour maîtriser les opérations de pile.
Le framework de collections Java inclut une classe Stack qui implémente la structure de données pile classique. Selon la documentation officielle Java, Stack étend Vector, héritant de toutes ses méthodes tout en ajoutant des opérations spécifiques aux piles.
Implémentation de Stack
Une pile suit le principe Last In, First Out (LIFO - dernier entré, premier sorti) : les éléments sont empilés (push) au sommet et dépilés (pop) du sommet. Le diagramme suivant illustre ce comportement.
Création d'une Stack
Pour créer une pile, importez java.util.Stack et instanciez-la avec le type générique souhaité :
Stack<Type> stack = new Stack<>();
Exemples :
// Pile d'entiers
Stack<Integer> intStack = new Stack<>();
// Pile de chaînes
Stack<String> stringStack = new Stack<>();
Méthodes de Stack
Au-delà des méthodes héritées de Vector, Stack fournit cinq opérations dédiées qui la distinguent des collections génériques. Pour une liste complète des méthodes de Vector, consultez la documentation de la classe Vector.
Méthode push()
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
}
}
Sortie
Stack: [Dog, Horse, Cat]
Méthode pop()
La méthode pop() supprime et retourne l'élément au sommet de la pile.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack Initial: " + animals);
String removed = animals.pop();
System.out.println("Élément Supprimé: " + removed);
}
}
Sortie
Stack Initial: [Dog, Horse, Cat] Élément Supprimé: Cat
Méthode peek()
La méthode peek() récupère l'élément du sommet sans le supprimer.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
String top = animals.peek();
System.out.println("Élément au sommet: " + top);
}
}
Sortie
Stack: [Dog, Horse, Cat] Élément au sommet: Cat
Méthode search()
La méthode search() retourne la position 1-based d'un élément depuis le sommet de la pile, ou -1 s'il n'est pas présent.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
int pos = animals.search("Horse");
System.out.println("Position de Horse: " + pos);
}
}
Sortie
Stack: [Dog, Horse, Cat] Position de Horse: 2
Méthode empty()
La méthode empty() vérifie si la pile contient des éléments.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
boolean isEmpty = animals.empty();
System.out.println("La pile est-elle vide? " + isEmpty);
}
}
Sortie
Stack: [Dog, Horse, Cat] La pile est-elle vide? false
Utilisez ArrayDeque au Lieu de Stack
Bien que Stack implémente une pile, elle est considérée comme legacy. Le code Java moderne préfère ArrayDeque (implémentant l'interface Deque) pour la fonctionnalité de pile car il offre de meilleures performances et une sémantique plus claire. Pour plus de détails, voir :
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression