La Pile en Java

Qu'est-ce qu'une Pile ?

Une Pile est une structure de données linéaire qui gère les éléments selon le principe LIFO (Last In, First Out), ce qui signifie que le dernier élément inséré est le premier à être retiré. Dans Java, la classe Stack fait partie du package java.util et hérite de la classe Vector, une classe plus ancienne.

Comparaison avec la File d'attente

À l'opposé de la Pile, la File d'attente (Queue) suit un ordre FIFO (First In, First Out), où le premier élément ajouté est le premier à être retiré. Ces structures de données peuvent être observées dans des situations courantes, comme faire la queue dans un magasin ou laver une pile de vaisselle en commençant par le dessus.

Utilisation du Deque

Depuis Java 1.6, l'interface Deque a été introduite comme une alternative plus moderne aux opérations LIFO que fournit la classe Stack. La documentation JDK recommande d'utiliser Deque plutôt que la classe Stack héritée. Lorsqu'un Deque est utilisé comme une Pile, les éléments sont ajoutés et retirés du début de la Deque. Voici une table récapitulative des méthodes équivalentes entre Stack et Deque :

| Méthode Stack | Méthode équivalente Deque | |----------------|----------------------------| | .push(item) | .addFirst(item) | | .pop() | .removeFirst() | | .peek() | .getFirst() |

Syntaxe de la Pile

Pour utiliser la Pile, vous devez l'importer comme suit :

import java.util.Stack;

Stack s = new Stack<>();

Ici, DataType représente le type de données que vous souhaitez stocker dans la Pile.

Méthodes principales de la Pile

La classe Stack propose plusieurs méthodes utiles :

  • .push(item): ajoute un élément au sommet de la Pile.
  • .pop(): retire et retourne l'élément au sommet de la Pile, en lançant une exception si la Pile est vide.
  • .peek(): retourne l'élément supérieur de la Pile sans l'enlever, lançant une exception si elle est vide.
  • .empty(): retourne true si la Pile ne contient aucun élément, false sinon.
  • .search(item): retourne la distance de l'élément au sommet de la Pile, en commençant par 1, ou -1 si l'élément n'est pas trouvé.

Exemple de code

Voici un exemple d'utilisation de la classe Stack :

import java.util.Stack;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Stack books = new Stack<>();
        System.out.println(books.isEmpty());
        books.push("Effective Java");
        books.push("Head First Java");
        books.push("Thinking in Java");
        System.out.println(books.size());
        System.out.println(books.search("Effective Java"));
        System.out.println(books.search("Java for dummies"));
        System.out.println(books.peek());
        System.out.println(books.pop());
        System.out.println(books.size());
        System.out.println(Arrays.toString(books.toArray()));
    }
}

L'exécution de ce code produira la sortie suivante :

true
3
-1
Thinking in Java
Thinking in Java
2
[Effective Java, Head First Java]