:: Enseignements :: ESIPE :: E4INFO :: 2014-2015 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Map et implantation de Map |
Exercice 1 - Bag
Le but de cet exercice est d'implanter un Bag qui est une structure
de données qui compte le nombre d'éléments que l'on stocke dedans.
Un Bag possède une méthode pour insérer un élement et,
si celui-ci est déjà présent dans le Bag, un compteur est incrémenté.
Il est de plus possible d'obtenir le compteur associé à un élément.
L'interface de
fr.umlv.bag.Bag est la suivante
.
L'interface
Bag devra être modifiée pour répondre aux questions du tp.
-
La méthode add insère un élément dans le Bag
et retourne le nombre d'éleéments contenus dans le Bag
(le nouvel élement étant compté).
Donc dans le cas, où l'élément n'existe pas au préalable dans le Bag
la méthode add doit renvoyer 1.
-
La méthode count prend en paramètre un objet et renvoie le
nombre de fois que cet objet est présent dans le Bag ou
0 si l'objet n'est pas dans le Bag.
-
La méthode remove qui retire une fois l'objet du Bag.
Si l'objet apparaît n fois dans le Bag, après l'appel à remove,
l'objet apparaîtra n - 1 fois. Si l'objet n'apparaît qu'une fois dans le Bag
l'objet n'apparaîtra plus dans le Bag.
La méthode doit renvoyer le nombre de fois que l'objet apparaît dans le Bag
après l'appel à remove ou 0 si l'objet n'est pas dans le Bag.
Répondre aux questions suivantes:
-
Ecrire une classe fr.umlv.bag.Bags qui contient pour l'instant
une méthode statique createSimpleBag qui permet de créer un Bag.
La classe implantant l'interface Bag devra être définie en tant que classe
interne de la classe Bag et avoir pour nom BagImpl.
La classe devra implanter les méthodes add et count,
avec une complexité de l'ordre de O(1).
De plus, la classe ne devra pas permettre de stocker null en tant qu'élément
ni permettre d'obtenir le nombre de fois que null est présent dans le Bag.
-
Ajouter la méthode remove à l'interface Bag
Modifier la classe BagImpl en conséquence.
-
Ajouter une méthode addWithCount à l'interface Bag
qui prend en paramètre un élément et un entier n et
qui permet d'ajouter un élément avec un nombre de fois (strictement supérieur à zéro).
La méthode devra être sémantiquement équivalente à appeler n fois la méthode
add mais être implantée en temps constant.
La méthode devra renvoyer le nombre de fois que l'élément est présent dans le Bag
après insertion.
Modifier la classe BagImpl en conséquence.
-
Ajouter une méthode iterator à l'interface Bag
qui renvoie un itéateur sur l'ensemble des éléments présents dans le Bag.
Si un élément est présent dans le Bag deux fois, l'itérateur devra
renvoyer deux fois le même élément.
L'ordre dans lequel l'itérateur doit renvoyer les éléments est indéfini.
-
Essayer d'implanter Iterator.remove et voyez que ce n'est pas
possible de l'implanter:
Indice: ConcurrentModificationException.
-
Faites en sorte que l'on puisse utiliser la syntaxe for-each
sur un Bag.
-
Ajouter une méthode createOrderedByInsertionBag à la classe Bags
qui permet de créer un Bag dont les éléments sont ordonnés par l'ordre
de leur première insertion dans le Bag.
Par exemple, l'insertion de 1, 3, 1, 2, 4, 3 dans le Bag
créer avec createOrderedByInsertionBag doit avoir son itérateur
qui renvoie la séquence 1, 1, 3, 3, 2, 4.
-
Ajouter à l'interface Bag une méthode addAll qui permet
d'ajouter un Bag dans un Bag.
Attention à bien conserver l'ordre d'insertion dans le cas où les Bag
ont été créés avec createOrderedByInsertionBag.
© Université de Marne-la-Vallée