Le but de cet exercice est d'implanter un
Bag qui est une structure
de données qui associe à chaque élement le nombre de fois que cet élement a été ajouté dans le
Bag.
L'interface de
fr.umlv.bag.Bag est la suivante
public interface Bag<E> {
public int add(E element, int count);
public int count(Object element);
}
-
La méthode add permet d'ajouter count fois un element dans le Bag
et renvoie le nombre de fois que l'élement est présent dans le Bag,
count est strictement positif et element n'est pas null.
-
La méthode count renvoie le nombre de fois que element est présent
dans le Bag, 0 sinon.
-
Expliquez pourquoi count prend un objet en paramètre et pas un E ?
-
Ecrivez une méthode createSimpleBag dans l'interface Bag qui permet
de créer une implantation de Bag, appelée BagImpl dans un autre fichier
utilisant une table de hachage pour associer à un élement un compteur.
-
Ajoutez une méthode forEach dans l'interface Bag qui prend
un consommateur en paramètre (une fonction qui prend un élement et renvoie void)
et appelle celui-ci pour chaque élement présent dans le Bag.
Donc si un élement est présent deux fois dans le Bag, le consommateur
doit être appelé deux fois.
Attention à ce que la signature de forEach soit la plus "générique" possible.
-
Ecrivez une méthode iterator qui renvoie un itérateur sur les éléments du
Bag. Comme pour la méthode forEach si un élement est présent
deux fois dans le bag, la méthode next de l'itérateur devra retourner
l'élement deux fois.
On ne vous demande pas d'implanter la méthode remove de l'itérateur.
-
Comment faire pour pouvoir utiliser une instance de Bag dans une boucle
"for each in" for(:) ?
Pourquoi le code de la méthode forEach n'est plus nécessaire ?
-
Ecrivez une méthode asCollection qui permet de voir un Bag
comme une collection non modifiable.
Note: il existe une classe AbstractCollection !
-
Vérifiez que les tests BagTest.asCollectionSize et BagTest.asCollectionContains
sont corrects sinon modifiez votre implantation.
-
Ajoutez une méthode createOrderedByInsertionBag à l'interface Bag
permettant de créer un Bag dont les élements sont triés par ordre d'insertion.
Puis ajoutez une méthode createOrderedByElementBag() prenant un Comparator
en paramètre et créant un bag dont les élements sont triés par l'ordre défini par le comparateur.