Contexte : nous allons aborder dans ce TP des classes utilitaires importantes, les Collections, avant de passer à l'accès aux bases
de données à travers la programmation Java
Introduction aux collections
Définition: Une collection est un objet dont la principale fonctionnalité est de contenir d’autres objets, comme un tableau.
Cf fiche de cours séparée sur les Collections
Travail pratique n°1 : utilisation des listes
Enoncé: on va étudier le fonctionnement des listes en Java
Etape 1: créer un nouveau projet Java. Appelez le par exemple TP SLAM2 1.5
Etape 2: créez un package nommé listes
Etape3: créez une classe TestListe et insérez le code fourni TestListe.java
Question 1: analyse d'une interface et d'une classe
1.1.a: Quel type d'interface est utilisée ?
1.1.b: Quel type de classe implémentant l'interface précédente est utilisée ?
1.1.c: quelle méthode permet d'insérer des éléments ?
1.1.d: quelle méthode permet de retirer des éléments ?
1.1.e: quel est le nom de la méthode crée qui affiche les éléments de la liste ? quels sont ses paramètres ? que veut dire final ?
1.1.f: y a t'il quelque chose de nouveau dans la boucle for de la méthode afficherListe() ? comment s'appelle cette construction ?
1.1.g: faites une recherche pour donner les avantages et inconvénients de la technique utilisée et présentée en 1.1.f
1.2: ajouter le code suivant à la fin:
afficherListe("sous liste", sousListe);
System.out.println("");
Que se passe t'il ? Pourquoi ?
Question 2: analyse d'un itérateur
2.1: nous allons utiliser un itérateur plutôt que de faire une boucle for ... each
- enlever le code ajouté en 1.2
- remplacer le code de la méthode afficherListe() par le code ci dessous
Iterator<String> moniterateur = testListePersonnage.iterator();
int i = 0;
while (moniterateur.hasNext()) {
System.out.format("%s %2d : %s\n", nom, i, moniterateur.next()) ;
i++ ;
2.1.a. Qu'est ce que un Iterator ?
2.1.b: A quoi s'applique t'il et comment se déclare t'il ?
2.1.c: Quelles sont ses méthodes et à quoi servent elles ?
2.2: Lisez votre cours et donnez la liste des classes qui implémentent l'interface List
2.3: remplacez la classe ArrayList par la classe Vector. Que se passe t'il ? Qu'en concluez vous ?
2.4: remplacez la classe Vector par la classe LinkedList. Que se passe t'il ? Qu'en concluez vous ?
2.5: quelles méthodes de LinkedList sont spécifiques ? utilisez une de ses méthodes pour que l'item "Clerc" apparaisse en 1ère
position
Question 3: initialisation d'une liste à partir d'un tableau
Java propose 2 méthodes pour initialiser une liste à partir d'un tableau: la méthode asList() de la classe Arrays et la méthode
addAll() de la classe Collections.
La méthode Collections.addAll() est la meilleure solution car elle copie les éléments. Les deux objets peuvent alors être modifiés de
manière indépendante.
3.1.a: ajouter le code suivant à la fin de TestListe :
String[] tableau = { "Gandalf", "Aragorn", "Bilbo", "Eolas" };
List<String> listeCopiee = new ArrayList<String>();
Collections.addAll(listeCopiee, tableau);
1
3.1.b: que fait le code précédent ?
3.1.c: écrivez les instructions pour afficher tous les éléments de tableau et de listeCopiee
3.2: Ajoutez un élément au tableau et un autre élément à la liste, avant de les afficher.
Question 4: initialisation d'une liste et itération avec un listIterator
4.1. Créez une nouvelle classe appelée ListeEntiers, avec l'attribut main
4.2. Créez une liste de 5 entiers
--> Il faut utiliser la classe Integer , qui est un "wrapper" du type primitif int, pour créer une liste d'entiers.
4.3. parcourez la liste avec un ListIterator, et additionnez l'ensemble des entiers
4.4. Ajoutez un élément à la liste, qui vaut 100 moins la somme.
4.5. Reparcourez la liste à l'envers en affichant tous les éléments
Travail pratique n°2 : utilisation des maps
Etape 1: créez un nouveau package nommé maps
Etape 2: créez une nouvelle classe nommée TestMaps et insérez le code java fourni TestMaps.java
Question 5: analyse d'un HashMap
5.1.a. Que fait le code fourni ?
5.1.b. Quelle est la classe utilisée ? Quelle interface de type Collection implémente t'elle ?
5.1.c. Comment sont insérées les valeurs ? Avec quelle méthode ?
5.1.d Comment parcourt t'on le HashMap ?
5.2. Boucle alternative sur un HashMap
Ecrire une seconde boucle pour parcourir le HashMap avec une instruction du type for ... each.
5.3. Testez si le HashMap contient la clef "Voleur" et imprimez le message "attention aux Voleurs" dans ce cas.
5.4. Testez si le HashMap contient des valeurs < 50 et imprimez le message "Point de vie faible"
Travail pratique n°3 : utilisation des ensembles (set)
Une collection de type Set ne permet pas l'ajout de doublons ni l'accès direct à un élément de la collection. Les fonctionnalités de
base de ce type de collection sont définies dans l'interface java.util.Set.
2 interfaces dérivées apportent des méthodes supplémentaires (à implémenter par les classes): SortedSet et NavigableSet
Les 2 principales classes implémentant des interfaces Set sont TreeSet et HashSet
Etape 1: créez un nouveau package nommé sets
Etape2: créez une classe TestSets et incorporez le code fourni.
Question 6: analyse d'un TreeSet et de l'interface Comparator
6.1.a. Que fait le code fourni ?
6.1.b. Comment sont rangés les éléments dans un TreeSet ?
6.2. Créez 2 nouvelles classes, Personnage et TestComparator, et insérez le code fourni
6.2.a. Que fait la classe personnage ?
6.2.b. Pouvez vous expliquez les résultats du programme TestComparator ?
6.2.c. Comment fonctionne l'interface Comparator ?
6.3. Ajoutez un TreeSet manaComp, contenant les mêmes éléments que vieComp et nomCmp qui va permettre de trier les éléments
en fonction de leur valeur en mana. Imprimez la liste de ses éléments.
2