DR ZOTCHI GIOVANI – CHAP9 – JAVA 0197991288
Jusqu'à présent, pour stocker plusieurs éléments, nous avons utilisé des tableaux (int[],
String[]). Le problème majeur des tableaux en Java est que leur taille est fixe. Si vous
créez un tableau de 10 cases, vous ne pouvez pas en ajouter une 11ème.
C'est ici qu'intervient le Framework des Collections : un ensemble d'outils puissants fournis
par Java pour stocker, manipuler et rechercher des données de manière dynamique (la taille
s'adapte automatiquement).
Chapitre 9 : Les Collections (List, Set, Map)
Le framework des collections est vaste, mais il se divise principalement en trois grandes
familles que tout développeur Java doit maîtriser.
9.1 Prérequis : Les Génériques (< >) et les Classes
Enveloppes (Wrappers)
Les collections en Java ne peuvent stocker que des objets, pas des types primitifs (int,
double, boolean).
Pour contourner cela, Java propose des "Classes Enveloppes" (Wrappers) pour chaque type
primitif :
int $\rightarrow$ Integer
double $\rightarrow$ Double
boolean $\rightarrow$ Boolean
char $\rightarrow$ Character
De plus, pour indiquer à Java quel type d'objet une collection va contenir, on utilise les
Génériques, symbolisés par des chevrons < >. Cela évite de mélanger des pommes et des
bananes dans la même liste.
9.2 La famille List : L'ordre et les doublons
Une List est une collection ordonnée (les éléments gardent l'ordre dans lequel ils ont été
insérés) qui accepte les doublons. On accède aux éléments via leur index (comme pour les
tableaux).
L'implémentation la plus utilisée est l'ArrayList.
Java
import [Link];
import [Link];
public class TestList {
public static void main(String[] args) {
// Déclaration et instanciation d'une liste de chaînes de
caractères
List<String> prenoms = new ArrayList<>();
// Ajouter des éléments
1
DR ZOTCHI GIOVANI – CHAP9 – JAVA 0197991288
[Link]("Alice");
[Link]("Bob");
[Link]("Alice"); // Les doublons sont autorisés !
// Accéder à un élément (index 0)
[Link]("Premier prénom : " + [Link](0));
// Connaître la taille (équivalent de .length pour les tableaux)
[Link]("Taille de la liste : " + [Link]());
// Supprimer un élément
[Link]("Bob"); // ou [Link](1);
// Parcourir la liste
for (String p : prenoms) {
[Link](p);
}
}
}
9.3 La famille Set : L'unicité absolue
Un Set est une collection qui n'accepte STRICTEMENT AUCUN doublon. Si vous
essayez d'ajouter un élément qui existe déjà, la collection l'ignore tout simplement.
L'implémentation la plus courante est le HashSet. Attention, le HashSet ne garantit pas
l'ordre des éléments.
Java
import [Link];
import [Link];
public class TestSet {
public static void main(String[] args) {
Set<Integer> nombres = new HashSet<>();
[Link](10);
[Link](20);
[Link](10); // Ignoré silencieusement ! Ce n'est pas une
erreur.
[Link]("Taille du Set : " + [Link]()); // Affiche
2
// Vérifier si un élément existe (très rapide avec un HashSet)
if ([Link](20)) {
[Link]("Le nombre 20 est présent.");
}
}
}
Cas d'usage typique : Stocker les adresses e-mail d'une newsletter pour être sûr de ne jamais
envoyer deux fois le même mail à la même personne.
2
DR ZOTCHI GIOVANI – CHAP9 – JAVA 0197991288
9.4 La famille Map : Les paires Clé/Valeur
Une Map (ou dictionnaire) est un peu à part. Elle ne stocke pas des éléments simples, mais des
paires associant une Clé à une Valeur.
Les clés sont uniques (comme un numéro de sécurité sociale).
Les valeurs peuvent être dupliquées (comme le prénom des personnes).
L'implémentation reine est la HashMap.
Java
import [Link];
import [Link];
public class TestMap {
public static void main(String[] args) {
// <TypeDeLaClé, TypeDeLaValeur>
Map<String, Integer> notes = new HashMap<>();
// Ajouter des paires clé/valeur (on utilise put, pas add)
[Link]("Alice", 18);
[Link]("Bob", 14);
[Link]("Charlie", 18); // Valeur dupliquée OK
// Si on réutilise une clé existante, ça ÉCRASE l'ancienne valeur
[Link]("Bob", 15); // Bob passe de 14 à 15
// Récupérer une valeur via sa clé
[Link]("Note d'Alice : " + [Link]("Alice")); //
Affiche 18
// Vérifier l'existence d'une clé
if ([Link]("Bob")) {
[Link]("Bob est dans le système.");
}
// Parcourir une Map (on parcourt généralement la liste des clés)
for (String nom : [Link]()) {
[Link](nom + " a eu " + [Link](nom));
}
}
}
3
DR ZOTCHI GIOVANI – CHAP9 – JAVA 0197991288
9.5 Résumé : Lequel choisir ?
C'est une compétence clé de savoir quelle collection utiliser selon le besoin :
Besoin Interface Implémentation Caractéristiques
courante
Garder l'ordre List ArrayList Rapide pour lire, lent pour
d'insertion, doublons insérer au milieu. Très
permis, accès par polyvalent.
index
Aucun doublon, ordre Set HashSet Ultra-rapide pour vérifier si un
sans importance élément existe (contains()).
Associer un identifiant Map HashMap Recherche ultra-rapide via la
unique à une donnée clé. Idéal pour des
dictionnaires ou annuaires.