TP n°3
Les collections
Exercice 1 : Collection contenant des noms de pays
Pour cet exercice, vous pouvez vous aider de la documentation en ligne de la classe « ArrayList » (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html)
a) Créer un programme Java qui crée une collection (ArrayList) de noms de pays puis alimenter cette collection avec quelques valeurs et afficher la taille de la collection
Exemple de résultat à obtenir :
> java CollPays
La collection creee contient 4 pays !
b) Compléter le programme pour afficher le contenu de la collection.
Exemple de résultat à obtenir :
> java CollPays
La collection créée contient 4 pays ! France
Allemagne USA
Chine
c) Trouver une méthode pour vider la collection et modifier votre programme pour afficher un message d’erreur lorsqu’elle est vide et afficher le contenu lorsqu’elle n’est pas vide.
Exemple de résultat à obtenir :
> java CollPays Liste vide
d) Après avoir de nouveau alimenté votre liste de pays, modifiez le nom d’un pays et affichez de nouveau la liste des pays.
Conseil : Pour modifier le nom, il faut supprimer un élément (remove) et en ajouter un autre (add) Remarque : Il y a plusieurs méthodes pour ajouter ou supprimer des éléments dans une collection de type ArrayList. Choisissez celle que vous voulez (dans la documentation) !
e) Triez votre collection et ré-affichez la liste des pays.
Pour trier notre collection, il faut utiliser la méthode « sort ». Si vous regardez la documentation de la classe « ArrayList », vous ne trouvez pas cette méthode.
Mais allez voir la documentation de la classe « Collections » : cette méthode y est présente.
Et par chance, une « ArrayList » est aussi une « collection ». Comme Médor qui est un « Chien » est aussi un « Animal ».
Ces notions seront vus ultérieurement…
Pour le moment, utilisons la syntaxe suivante « Collections.sort(uneArrayList) » pour trier une ArrayList.
Exercice 2 : Annuaire
Quelques interfaces et classes sont disponibles dans le répertoire partagé (…/TD3/annuaire) a) Réaliser une classe M_Annuaire implémentant l'interface Annuaire.
On utilisera comme structure de données pour l'annuaire une table associative (interface Map) : la personne jouant le rôle de clé et la liste des numéros de téléphone étant la valeur associée à cette clé. Dans un premier temps on se contentera d'écrire une implémentation complète uniquement pour les méthodes ajouterEntree(Personne, ListeNumTel), personnes(),
afficher() et numeros() de la classe Annuaire.
b) Tester ces méthodes avec le petit programme principal suivant qui :
• crée un annuaire vide,
• ajoute une entrée pour une personne de nom DURAND, prénom Sophie, Civilité Mlle. avec comme numéro 0500151171
• ajoute une entrée pour une personne de nom DUPONT, prénom Jean, Civilité M. avec comme numéro 0500151170
• ajoute une entrée pour une personne de nom DUSCHMOL, prénom Louis, Civilité M. avec comme numéro 0500146761
• ajoute une entrée pour une personne de nom AARGH, prénom Robert, Civilité M. avec comme numéro 0500140361
• affiche le contenu de l'annuaire.
• effectue une recherche des numéros de la personne Sophie DURAND et une recherche des numéros de Jean DUPONT
public static void main(String[] args) { // crée un annuaire vide
Annuaire an = new M_Annuaire();
// ajoute deux personnes à l'annuaire
Personne p1 = new Personne(Personne.MLLE,"DURAND","Sophie");
an.ajouterEntree(p1,new AL_ListeNumTel(new NumTel(0500151171,'D')));
an.ajouterEntree(new Personne(Personne.MR,"DUPONT","Jean"),
new AL_ListeNumTel(new NumTel(0500151170,'P')));
an.ajouterEntree(new Personne(Personne.MR,"DUSCHMOL", "Louis"),
new AL_ListeNumTel(new NumTel(0500146761,'P')));
an.ajouterEntree(new Personne(Personne.MR,"AARGHH", "Robert"),
new AL_ListeNumTel(new NumTel(0500140361,'P')));
// imprime l'annuaire
System.out.println("---");
System.out.println(an);
System.out.println("---");
// Recherche des numéros de Sophie DURAND System.out.println("numeros de " + p1);
System.out.println(an.numeros(p1));
// Recherche des numéros de Jean DUPONT
Personne p2 = new Personne(Personne.MR,"DUPONT","Jean");
System.out.println("numeros de " + p2);
System.out.println(an.numeros(p2));
}
Constatez que la recherche du numéro pour Jean DUPONT a échoué alors qu'elle a réussi pour Sophie DURAND. Quelle explication donnez vous à cela ?
c) Modifiez la classe Personne de manière à corriger les erreurs détectées précédemment.