programmation Java (école d'ingénieur) · Chapitre 12 · Exercice de TD
Une pile générique
Collections et génériques · niveau 2
Énoncé
Écrire une classe générique Pile<T> qui range ses éléments dans une ArrayList<T>, avec les méthodes empiler, depiler, sommet, estVide et taille. Dépiler ou consulter le sommet d'une pile vide doit lever une NoSuchElementException avec un message clair. Faut-il placer le sommet au début ou à la fin de la liste ? Pourquoi ?
Corrigé
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
public class Exo9Pile {
static class Pile<T> {
private final List<T> elements = new ArrayList<>();
void empiler(T x) { elements.add(x); } // le sommet est en fin de liste
T sommet() {
if (estVide()) throw new NoSuchElementException("pile vide");
return elements.get(elements.size() - 1);
}
T depiler() {
if (estVide()) throw new NoSuchElementException("pile vide");
return elements.remove(elements.size() - 1);
}
boolean estVide() { return elements.isEmpty(); }
int taille() { return elements.size(); }
}
public static void main(String[] args) {
Pile<String> p = new Pile<>();
p.empiler("a"); p.empiler("b"); p.empiler("c");
System.out.println(p.depiler() + " " + p.sommet() + " " + p.taille());
Pile<Integer> q = new Pile<>();
try {
q.depiler();
} catch (NoSuchElementException e) {
System.out.println("erreur : " + e.getMessage());
}
}
}
c b 2
erreur : pile vide
Le sommet est placé en fin de liste : ajouter ou retirer le dernier élément d'une ArrayList se fait en temps constant, alors qu'ajouter ou retirer le premier oblige à décaler tous les autres. L'attribut elements est private : l'utilisateur de la pile ne peut pas y accéder autrement que par les méthodes de pile (chapitre 8).
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.