Leçons du module (2/2)
Collections et ArrayList
Les tableaux traditionnels en Java ont une taille fixe définie au moment de leur création. Pour travailler avec des listes de données dont la taille peut varier dynamiquement, Java fournit le Framework des Collections (Java Collections Framework). La classe la plus utilisée est ArrayList.
La Classe ArrayList et les Generics
ArrayList implémente un tableau redimensionnable en mémoire. Pour déclarer une ArrayList, nous devons spécifier le type des éléments qu'elle contiendra en l'entourant de crochets pointus < >. Cette fonctionnalité s'appelle les Generics.
Pour utiliser ArrayList, nous devons l'importer au début du fichier depuis java.util.ArrayList.
Déclaration et instanciation :
import java.util.ArrayList;
ArrayList<String> shoppingList = new ArrayList<>();
Méthodes Principales
Voici les opérations fondamentales sur une ArrayList :
add(élément): Ajoute un élément à la fin de la liste.get(index): Renvoie l'élément à l'index spécifié (indexation commençant à 0).size(): Renvoie le nombre d'éléments actuellement présents dans la liste.remove(index): Supprime l'élément à l'index indiqué.
shoppingList.add("Pane");
shoppingList.add("Latte");
System.out.println("Elementi: " + shoppingList.size()); // Stampa 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Stampa "Pane"
Parcourir une Liste (For-Each)
La boucle for-each est la structure idéale pour parcourir tous les éléments d'une collection :
for (String item : shoppingList) {
System.out.println(item);
}
Tableau vs ArrayList : Mémoire et Performances
Bien qu'une ArrayList soit beaucoup plus flexible qu'un tableau statique, elle entraîne des coûts en termes de performances et de mémoire :
- Tableau Statique : Il est alloué dans un bloc de mémoire contigu, a des dimensions fixes et l'accès aux éléments via l'index est extrêmement rapide. Il stocke directement des types primitifs sans surcoût.
- ArrayList : En interne, elle gère un tableau qui est redimensionné (en créant un nouveau tableau plus grand et en y copiant les anciens éléments) lorsque sa capacité initiale (généralement 10) est dépassée. De plus, elle ne contient que des références à des objets, ce qui introduit un surcoût de mémoire pour chaque élément.
Autoboxing et Unboxing
Comme l' ArrayList ne peut accueillir que des objets, Java effectue automatiquement la conversion entre les types primitifs et leurs classes wrappers respectives :
- Autoboxing : Conversion automatique du type primitif vers la classe wrapper. Par exemple, lorsque vous faites
numbers.add(42), Java convertit automatiquement42(int) enInteger.valueOf(42)(Integer). - Unboxing : Conversion automatique de la classe wrapper vers le type primitif. Par exemple, lorsque vous exécutez
int num = numbers.get(0), Java effectue en interne la conversion d'Integerversint.
À toi de jouer
Importez ArrayList, déclarez une ArrayList de String nommée names. Ajoutez Alice et Bob à la liste, puis affichez sa taille à l'aide de la méthode size().
Afficher l'indice
Incluez `import java.util.ArrayList;` tout en haut. Créez la liste avec `ArrayList<String> names = new ArrayList<>();`, ajoutez les éléments et affichez sa taille avec `names.size()`.
Solution disponible après 3 tentatives
Déclarez une ArrayList d'Integer nommée numbers, insérez le nombre 42 et affichez-le en le récupérant via l'index 0 avec get().
Afficher l'indice
Utilisez `ArrayList<Integer> numbers = new ArrayList<>();` (avec la classe wrapper Integer) et affichez-le avec `System.out.println(numbers.get(0));`.
Solution disponible après 3 tentatives
Déclarez une ArrayList de String nommée colors. Ajoutez les couleurs Red, Green et Blue à la liste. Enfin, utilisez une boucle for-each pour parcourir la liste et afficher chaque couleur à l'écran.
Afficher l'indice
Déclarez la liste avec `ArrayList<String> colors = new ArrayList<>();`, ajoutez les trois couleurs et utilisez une boucle `for (String c : colors)` pour les afficher avec `System.out.println(c);`.
Solution disponible après 3 tentatives