Les collections
Objectifs du chapitre
Développer des applications utilisant des collections.
Dans les exemples de ce chapitre, nous nous limiterons à l’utilisation des classes Vector et ArrayList. Nous rencontrerons d’autres collections dans les chapitres suivants.
Introduction
1. Définition
Les collections, comme les tableaux, permettent de stocker plusieurs éléments du même type.
Contrairement au tableau, dont la taille est fixée lors de l’instanciation, une collection peut changer de taille dynamiquement. Par contre, elle ne peut stocker que des références d’objets (pas d’éléments de type primitif : int, float…).
Cette limitation n’est pas vraiment gênante. Pour une liste d’entiers, on peut stocker une liste d’objets de type Integer. À chaque type primitif correspond une classe (dite enveloppeur) : Float pour float, Double pour double, Character pour char...
2. Hiérarchie partielle des collections
Une collection est une classe qui implémente l’interface Collection.
Voici un extrait de la hiérarchie des collections :
Les classes ArrayList et Vector sont des collections. Elles héritent de la classe abstraite AbstractList qui implémente l’interface List, elle-même héritière de l’interface Collection. Toutes ces classes et interfaces sont dans le package java.util.
Toutes les méthodes définies dans les interfaces List et Collection sont donc disponibles dans les deux classes.
Toutes les applications de ce chapitre peuvent être programmées avec l’une ou l’autre classe (les appels de méthodes...
Exemples d’utilisation de collections
1. ArrayList de String
public class ArrayListString
{
public static void main(String argv[])
{
int i;
Création d’une liste destinée à contenir des références d’objets String. La collection est pour l’instant vide :
ArrayList<String> listeString = new ArrayList<String>();
La chaîne <String> placée après ArrayList précise que la collection ne peut contenir que des objets de type String (ou d’une classe héritière de String). Avant la version 5 de Java, les collections n’étaient pas typées. On pouvait y ajouter n’importe quel type d’objet. Cette syntaxe est encore acceptée, malgré quelques ’warnings’.
La méthode add() ajoute un poste à la collection :
listeString.add("Oie bernache");
listeString.add("Moineau");
listeString.add("Vautour");
Toute tentative d’ajout d’un objet qui n’est pas du type String est rejetée par le compilateur :
Affichage des chaînes stockées dans l’ArrayList :
-
La méthode size() retourne la taille de l’ArrayList (le nombre de chaînes...
Travail pratique : Voitures (avec collections)
1. Objectif
L’objectif est de reprendre l’application TP Voiture du chapitre Les tableaux, en remplaçant les tableaux par des collections (ArrayList).
2. Sujet
Reprendre le TP Voitures.
-
Utiliser une ArrayList de vendeurs, initialisée dans la méthode main().
-
Utiliser une ArrayList de voitures, initialisée de manière conversationnelle en entrant au clavier le nombre de voitures à créer, puis pour chaque voiture, le numéro de moteur (ou 0 pour une affectation automatique), et le nom du vendeur.
3. Voitures (avec collections de type ArrayList) : proposition de correction
Seule la classe TestVoiture doit être modifiée :
public class TestVoiture
{
public static void main(String argv[]) throws IOException
{
Garage g1, g2;
ArrayList<Vendeur> listeVendeurs; // Liste de vendeurs
ArrayList<Voiture> listeVoitures; // Liste de voitures
int iVoiture; // Indices
int iVendeur;
...