Module Java.7 – Collections
Objectif
Maîtriser les collections Java : Array, ArrayList, HashMap et toutes les collections du framework Java pour manipuler efficacement les données.
Théorie
Array (Tableaux)
Les tableaux sont de taille fixe.
Création
// Déclaration et initialisation
int[] nombres = {10, 20, 30};
int[] autres = new int[5]; // Taille fixe : 5 éléments
// Déclaration puis initialisation
int[] nombres2;
nombres2 = new int[]{10, 20, 30};
Accès et modification
int[] nombres = {10, 20, 30};
nombres[0]; // 10 (premier élément, index 0)
nombres[1] = 25; // Modifie le deuxième élément
nombres.length; // 3 (longueur, pas une méthode)
Limitations
- Taille fixe (ne peut pas grandir/rétrécir)
- Pas de méthodes utilitaires
- Performance optimale pour accès direct
ArrayList
Liste dynamique qui peut grandir.
Création et utilisation
import java.util.ArrayList;
import java.util.List;
List<String> noms = new ArrayList<>();
noms.add("Jean");
noms.add("Marie");
noms.add(0, "Pierre"); // Insère à l'index 0
noms.get(0); // "Pierre"
noms.size(); // 3
noms.remove("Jean"); // Retire "Jean"
noms.remove(0); // Retire l'élément à l'index 0
noms.contains("Marie"); // true
noms.clear(); // Vide la liste
Méthodes utiles
List<Integer> nombres = new ArrayList<>();
nombres.add(10);
nombres.add(20);
nombres.add(30);
nombres.indexOf(20); // 1
nombres.lastIndexOf(20); // 1
nombres.isEmpty(); // false
nombres.contains(20); // true
nombres.toArray(); // Convertit en tableau
Parcourir
// Enhanced for
for (String nom : noms) {
System.out.println(nom);
}
// Avec index
for (int i = 0; i < noms.size(); i++) {
System.out.println(i + ": " + noms.get(i));
}
// Iterator
Iterator<String> it = noms.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// forEach (Java 8+)
noms.forEach(nom -> System.out.println(nom));
HashMap
Structure clé-valeur pour stocker des paires.
Création et utilisation
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> ages = new HashMap<>();
ages.put("Jean", 30);
ages.put("Marie", 25);
ages.put("Pierre", 35);
ages.get("Jean"); // 30
ages.get("Inexistant"); // null
ages.containsKey("Jean"); // true
ages.containsValue(30); // true
ages.remove("Jean"); // Retire la paire
ages.size(); // 2
ages.clear(); // Vide
Parcourir
// Par clés
for (String nom : ages.keySet()) {
System.out.println(nom + ": " + ages.get(nom));
}
// Par valeurs
for (Integer age : ages.values()) {
System.out.println(age);
}
// Par paires (entrySet)
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// forEach (Java 8+)
ages.forEach((nom, age) -> System.out.println(nom + ": " + age));
Autres collections
HashSet
Collection de valeurs uniques.
import java.util.HashSet;
import java.util.Set;
Set<String> noms = new HashSet<>();
noms.add("Jean");
noms.add("Marie");
noms.add("Jean"); // Ignoré (déjà présent)
noms.contains("Jean"); // true
noms.size(); // 2
LinkedList
Liste chaînée (meilleure pour insertion/suppression).
import java.util.LinkedList;
List<String> noms = new LinkedList<>();
noms.add("Jean");
noms.addFirst("Pierre"); // Ajoute au début
noms.addLast("Marie"); // Ajoute à la fin
TreeMap
Map triée par clés.
import java.util.TreeMap;
Map<String, Integer> ages = new TreeMap<>();
ages.put("Jean", 30);
ages.put("Marie", 25);
// Automatiquement trié par ordre alphabétique des clés
Collections Framework
Hiérarchie :
Collection(interface)List(ordonnée, doublons autorisés)ArrayList,LinkedList
Set(pas d'ordre garanti, pas de doublons)HashSet,TreeSet
Map(clé-valeur)HashMap,TreeMap,LinkedHashMap
Méthodes utilitaires Collections
import java.util.Collections;
List<Integer> nombres = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5));
Collections.sort(nombres); // Trie
Collections.reverse(nombres); // Inverse
Collections.shuffle(nombres); // Mélange
Collections.max(nombres); // Maximum
Collections.min(nombres); // Minimum
Collections.frequency(nombres, 1); // Fréquence de 1
Exercice
-
Tableaux
- Créez et manipulez des tableaux
- Testez les limites (ArrayIndexOutOfBoundsException)
- Comprenez la taille fixe
-
ArrayList
- Créez des listes dynamiques
- Testez toutes les méthodes
- Parcourez de différentes manières
-
HashMap
- Créez des maps
- Stockez et récupérez des valeurs
- Parcourez avec entrySet
-
Autres collections
- Testez HashSet, TreeMap
- Comprenez les différences
- Choisissez la bonne collection
-
Collections Framework
- Utilisez les méthodes utilitaires
- Triez, mélangez, recherchez
- Comparez les performances
Quiz
-
Quelle est la différence entre Array et ArrayList ?
- Aucune différence
- Array taille fixe, ArrayList dynamique
- ArrayList est plus rapide
-
Comment parcourir un HashMap ?
- for (int i = 0; i < map.size(); i++)
- for (Map.Entry entry : map.entrySet())
- map.forEach()
-
Que fait HashSet ?
- Trie les éléments
- Stocke des valeurs uniques
- Permet les doublons
-
Quelle collection pour clé-valeur ?
- ArrayList
- HashMap
- HashSet
-
Que fait Collections.sort() ?
- Crée une nouvelle liste triée
- Trie la liste en place
- Retourne un tableau
Mini défi
Mission : Créer un système de gestion de données complet
Créez un système qui gère une collection de produits :
Données :
class Produit {
int id;
String nom;
double prix;
int stock;
String categorie;
}
Fonctionnalités :
- Recherche par nom, ID, catégorie
- Tri par prix, stock, nom
- Calculs (prix moyen, total stock)
- Filtres (stock > 0, prix < seuil)
- Groupement par catégorie (utilisez Map)
Critères :
- ✅ Utilisation de ArrayList et HashMap
- ✅ Méthodes de collections appropriées
- ✅ Code organisé
- ✅ Performance optimisée
Objectif : Maîtriser toutes les collections Java et savoir choisir la bonne pour chaque situation.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez Array, ArrayList, HashMap et pouvez les utiliser efficacement.