Vous êtes sur la page 1sur 3

TP de Java : Programmation générique

Exercice 1 : Les collections


En java, une collection est un objet qui permet de manipuler un ensemble d’objets
En gros, on distingue trois types de collections :
Collections de types liste : liste dynamique autorisant des doublons.
Collections de type set : les ensembles n’autorise pas les doublons.
Collections de type Map : les associations de type clé/valeur.
Collections de type Queue : collection qui stocke des éléments suivant l’ordre FIFO (First In,
First Out)
Consulter la page web de Jean-Michel DOUDOUX pour voir les différentes utilisations de ces
collections.
Travail à faire :
1. a. Créer une liste dynamique type entiers avec la classe ArrayListe() ;Ajouter des éléments à
la liste, supprimer un élément et retourner son indice. modifier L’élément d’indice 3.
b. Créer une liste chaînée de type String avec LinkedList(). Ajouter des éléments, supprimer
un élément situé au milieu, à la fin et au début de la liste.
c. Créer une pile avec Stack ; empiler, dépiler des éléments. Compter le nombres d’élément de
la liste. Traiter les exceptions qui peuvent surgir si la pile est vide où est pleine.
d. créer une file d’attente avec la classe ArrayDeque, ajouter des éléments, supprimer des
éléments et traiter les exceptions.
e. Créer un dictionnaire machineNom : "DBOrdi" , AdressMac :0xAff96, AdressIP :127.0.0.1
Groupe : "Admins" Domaine :"ESTO.com" avec la classe HashMap.
f. refaire la question e avec la classe HashSet. Essayer d’entrer des doublons.
g. Utiliser la classe TreeSet.
Exercice 2 :
public class MethGen2
{ static <T> T hasard (T e1, T e2)
{ double x = Math.random() ;
if (x <0.5) return e1 ;
else return e2 ;}
Ecrire une classe pour tester le code suivant :
Integer n1 = 2 ; // conversion automatique de int en Integer
Integer n2 = 5 ; // conversion automatique de int en Integer
Double x1 = 2.5 ; // conversion automatique de double en Double
hasard (n1, n2) ; // deux arguments du même type int
hasard (n1, x1) ; // les arguments ne sont pas de même types
En fait, compte tenu de l’effacement, la méthode hasard est compilée comme si on l’avait
écrite ainsi :
static Object hasard (Object e1, Object e2)
double x = Math.random() ;
if (x <0.5) return e1 ;
else return e2 ;}
Si l’on souhaite davantage de vérifications à la compilation, il est possible d’imposer le type
voulu pour T lors de l’appel de la méthode, en utilisant une syntaxe de la forme suivante :
nomClasse<type>.nomMéthode
Le nom nomClasse est celui de la classe dans laquelle est définie la méthode.
Tester les codes et commenter :
MethGen2.<Double> hasard (n1, x1) ;// ?
MethGen2.<Number> hasard (n1, x1) ;// ?
Exercice 3 :

1
Dans une classe de teste, testez les codes suivants et commentez :
ListeGenerique<Number> listeNombre ;
ListeGenerique<Double> listeReels ;
listeReels = new ListeGenerique<Double>(10) ;
listeNombre= listeReels ;
Exercice 4 : Implémentation d’un arbre de recherche en Java
La Classe Noeud
Cette classe représentera un noeud d’un arbre binaire (pas nécessairement d’un arbre binaire
de recherche). Un noeud a une valeur et peut avoir 2 noeuds fils : le noeud gauche et le noeud
droit.La classe Noeud doit être générique. On devra pouvoir indiquer le type E des valeurs
qui seront conservées dans le noeud. Les éléments de E ne sont pas nécessairement ordonnés.
Mettez dans la classe
1. un constructeur sans paramètre,
2. un constructeur qui prend une valeur en paramètre,
3. un constructeur qui prend une valeur et les 2 noeuds gauche et droit en paramètres,
4. les accesseurs et les modificateurs pour la valeur et les 2 noeuds gauche et droit,
5. une méthode toString() qui affiche les valeurs du noeud et les sous- noeuds attachés à
ce noeud.
Vous écrirez une classe TestNoeud pour tester votre classe. Testez seulement la création d’un
nœud qui contient un nœud fils ; utilisez la méthode toString() pour vérifier que tout marche
bien.
Classe ArbreBinaireRecherche
Cette classe sera générique. On pourra indiquer le type E des éléments contenus dans l’arbre.
Un arbre binaire de recherche a un nœud racine.
Pour tout nœud de l’arbre
1. le sous-nœud gauche est la racine d’un arbre qui contient les éléments inférieurs ou égaux
à la valeur du nœud ;
2. le sous-nœud droit est la racine d’un arbre qui contient les éléments supérieurs à la valeur
du nœud.
Un arbre binaire de recherche doit nécessairement travailler avec une relation d’ordre sur les
éléments de type E (cela n’est pas nécessaire pour le nœud d’un arbre binaire quelconque).
Vous allez commencer par écrire un arbre dont les éléments ont un ordre naturel, comme c’est
le cas, par exemple, pour Integer ou String. Cet ordre naturel sera représenté par l’interface
générique java.lang.Comparable.
C’est à vous de compléter la définition de Comparable pour trouver la bonne instanciation.
Cette classe contiendra 2 constructeurs de signatures :

1. Le constructeur ArbreBinaireRecherche() (construit un arbre vide)


2. Le Constructeur ArbreBinaireRecherche(E) (indique la valeur de la racine de l’arbre).
3. Une méthode pour ajouter un élément dans l’arbre ;
4. Une méthode qui indique si un objet appartient à l’arbre ;
5. Une méthode pour afficher tous les éléments de l’arbre dans leur ordre naturel.
Quelle visibilité allez-vous donner à la classe Noeud (vous pouvez modifier cette classe si vous
le souhaitez) ?
Test de ArbreBinaireRecherche avec une instanciation
Écrivez une classe TestArbreBinaire qui crée un arbre binaire qui contient des Integer et un

2
autre qui contient des String. Pour tester avec des entiers, vous pouvez générer un grand nombre
d’entiers de façon aléatoire en utilisant la classe java.util.Random et sa méthode nextInt() ou
nextInt(int).
Testez aussi avec un arbre binaire qui contient des employés. Utilisez pour cela les 2 classes
Personne et Employe (classe fille de Personne). Les employés seront rangés dans l’arbre suivant
l’ordre alphabétique de leur nom.

Vous aimerez peut-être aussi