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