:: Enseignements :: ESIPE :: E4INFO :: 2011-2012 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Examen de Java Avance |
Quelques conseils avant de commencer, prenez le temps de lire entièrement
le sujet, si vous ne comprenez pas quelque chose essayez de faire un dessin,
si des tests JUnits ne compilent pas, cela veut dire que la signature
de votre méthode n'est pas la bonne (il n'y a pas de méthode surchargée dans
le sujet à part celles de l'API bien sûr), si un test JUnit ne marche pas
et que vous ne comprenez pas pourquoi, relisez la doc de la méthode
que vous devez implanter plutôt que d'écrire la méthode pour qu'elle passe
le test.
Exercice 1 - MultiMap
Le but de cet exercice est d'implanter une MultiMap, qui est
une sorte de Map mais qui accepte plusieurs valeurs pour une même clé
stockées dans l'ordre d'insertion dans une liste. En fait, on peut voir une
MultiMap comme une Map dont les valeurs sont des List
donc pour une clé.
Une MultiMap ne devra jamais stocker null que cela soit en tant
que clé ou en tant que valeur.
L'interface de
fr.umlv.exam2.MultiMap est la suivante
-
La méthode size renvoie le nombre total de couples insérés
dans la MultiMap. Notez que le nombre de clés de la MultiMap
sera toujours inférieur ou égal à size.
-
La méthode get prend en paramètre une clé et renvoie une liste
contenant la liste des valeurs qui ont pour clé la clé recherchée.
Si la clé demandée ne possède aucune valeur, la méthode get devra
renvoyer une liste vide.
-
La méthode add ajoute un couple clé/valeur à la MultiMap,
s'il existe déjà des valeurs pour la clé, la nouvelle valeur sera ajoutée
à la fin de la liste des valeurs déjà existantes.
On appelera
MultiMapImpl le nom de classe implantant l'interface
MultiMap
et celle-ci ne devra en aucun cas être visible par un utilisateur externe,
pour cela,
MultiMapImpl devra être implanter en tant que classe interne
de la classe
MultiMaps qui elle contiendra une méthode
statique permettant de créer des
MultiMap.
-
Ecrire une méthode statique newMultiMap dans la classe
MultiMaps qui ne prend rien en paramètre
renvoie une MultiMap dont l'ordre des clés est indéfini.
-
Ecrire une méthode asMap qui permet de renvoyer une java.util.Map
qui est une vue de la MultiMap sur laquelle on appelle asMap.
La Map renvoyée ne devra pas permettre de modifier la MultiMap
et sera donc une Map non mutable. Par contre, toutes les modifications de la
MultiMap même postérieures à la création de la vue en utilisant asMap
devront être reflétées par la Map
(comme le montre le test JUnit asMapView())
-
Ajouter une méthode addAll qui prend en paramètre une MultiMap
et ajoute tous les clés/valeurs de celle-ci dans la MultiMap courante.
Attention à la signature de la méthode addAll.
-
Ajouter une méthode iterator à l'interface de MultiMap qui renvoie
un Iterateur sur toutes les valeurs (à plat) stockées dans la MultiMap.
L'iterateur devra permettre de retirer des valeurs de la MultiMap.
-
Modifier l'interface MultiMap pour qu'il soit possible de faire
un foreach sur une MultiMap.
Le test JUnit est ici
MultiMapTest.java.
Attention, cette classe utilise son propre package
fr.umlv.exam2.test
et non pas celui de
MultiMap.
© Université de Marne-la-Vallée