TD 10 - HashMap 1 Présentation du sujet 2 Classe Couple

publicité
IUT Charlemagne - Dept info
Complément JAVA
2012-2013
DUT 2A
TD 10 - HashMap
1
Présentation du sujet
On souhaite développer une classe générique TabAsso en JAVA permettant de manipuler un tableau associant des objets d’une classe E à des objets d’une classe F.
Exemple : une liste de courses qui associe à chaque élément le nombre d’éléments à
acheter.
Clef (de type E, par ex String) Valeur (de type F, par ex Integer)
≪ Jambon ≫
4
≪ Poireau ≫
2
≪ Chocolat ≫
1
La classe TabAsso consistera en un tableau de couples (clef, valeur), chaque clef ne
pouvant être présente qu’une seule fois dans le tableau.
2
Classe Couple
Pour ce faire, vous allez commencer par écrire la classe générique Couple. Chaque
objet de cette classe contient deux attributs
– un attribut clef de type E (variable de type)
– un attribut valeur de type F (variable de type)
La classe Couple permet de modéliser les associations clef-valeur : un objet de type
Couple représente une association de ce type.
2.1
Déclaration et constructeur
Déclarer la classe Couple.
Écrire un constructeur qui prend une clef et une valeur en paramètre et qui permet
de créer l’objet Couple correspondant.
2.2
Accès
Ecrire une méthode getClef() qui retourne la clef du couple.
Cpt JAVA - TD 10 - HashMap
1
2.3
Utilisation
Utilisez le constructeur dans un main pour associer à la clef String ”Jambon” l’entier 4.
3
Tableau associatif
3.1
Déclaration
Un tableau associatif est aussi une classe générique (il faut préciser à l’utilisation le
type des clefs et le type des valeurs, exactement comme la classe HashMap de JAVA)
Un objet de type tableau associatif contient un attribut listeCouples qui est
ArrayList des couples correspondant. Chaque couple de cette liste correspondra à
une association stockée dans le tableau associatif.
Déclarer la classe et ses attributs.
3.2
Constructeur
Écrire un constructeur qui construit un tableau associatif en initialisant l’attribut
listeCouples (ne contenant initialement pas d’élément)
3.3
Méthode get
Déclarer et écrire la méthode get. Cette méthode prend en paramètre une clef et
retourne la valeur associée à cette clef (en parcourant le tableau de couples). Si cette
clef n’est associée à aucune valeur, la méthode retourne null.
3.4
Méthode insertion
Déclarer et écrire la méthode insertion permettant d’ajouter une association au
tableau. Cette méthode vérifie si la clef est présente (auquel cas, elle modifie la valeur
associée) si la clef n’est pas déjà présente, elle ajoute l’association.
3.5
Méthode toString
Écrire une méthode toString.
3.6
Tests
Vérifiez le bon comportement de vos méthodes en créant une liste de courses.
Une fois que cela est fait, testez le comportement de vos classes avec le morceau de
programme suivant :
Cpt JAVA - TD 10 - HashMap
2
//test1
TabAsso<String,Integer> t=new TabAsso<String, Integer>();
t.insertion("Jambon", 4);
t.insertion("Jambon", 84);
String a="Jambon";
t.insertion(a,56);
System.out.println(t);
// test2
TabAsso<String,Integer> t2=new TabAsso<String, Integer>();
t2.insertion("Jambon", 84);
String b="Jam";
b=b+"bon";
t2.insertion(b,56);
System.out.println(t2);
Y a-t-il un comportement différent. Si oui, pourquoi ?
Comment pensez vous comparez les clefs ? Avez vous besoin de modifier la déclaration
de la classe tableauAssociatif ? pourquoi ? Comment s’effectue la comparaison par
défaut ?
Comment modifier la manière dont la comparaison s’effectue ?
3.7
Méthode listeclef
Déclarer et écrire une méthode retournant la liste des clefs.
4
4.1
Héritage
Utilisation de tabAsso
Soit un tableau associatif tabAsso associant des String (valeur) à des Numbers
(clef). Déclarer ce tableau associatif.
Peut-on utiliser ce tableau pour associer des String à des Integer ? Oui/non ?
Comment et pourquoi ?
Peut on utiliser ce tableau comme paramètre d’une fonction qui prend un tableau
associatif associant des String à des Integer ? oui/non ? pourquoi ?
4.2
Interface générique
Comme il existe plusieurs manières d’implémenter un tableau associatif (table de hachage, liste de couples, . . .cf cours de structure). Nous allons donc séparer la déclaration
Cpt JAVA - TD 10 - HashMap
3
de l’interface (qui propose les méthodes) de son implémentation.
Modifiez votre code en développant
– une interface générique Tab<E,F> proposant toutes les méthodes
– la classe tabAsso<E,F> implémentant cette interface
4.3
TabAsso affichable
On souhaite faire un tableau associatif stockant des clefs affichable (qui possède la
méthode affiche)
Comment faire ? et pourquoi ? Proposer une classe héritant de TabAsso fonctionnant
de cette manière et ayant la méthode affiche (affichant la liste des clefs)
Utiliser cette classe convenablement en vérifiant que des tests équivalents à ceux de
la question 3.5 sont encore valides.
Cpt JAVA - TD 10 - HashMap
4
Téléchargement