:: Enseignements :: Master :: M1 :: 2013-2014 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | The universe is the limit |
Implantation spécifique de Set dans le cas où on connait
l'ensemble des valeurs pouvant être contenues dans un Set.
On appelle univers l'ensemble des valeurs pouvant être contenues dans un ensemble.
Un ensemble est contruit de telle sorte qu'il ne puisse contenir que des valeurs appartenant à son univers de référence.
Les ensembles créés doivent être implantés de façon compacte en mémoire.
Exercice 1 - Universe
Chaque élément à l'intérieur d'un univers est non nul et numéroté à partir de 0.
Un univers peut croitre mais pas diminuer.
-
Comment faire pour que deux objets égaux au sens de equals
puissent être présents dans un même univers ?
Expliquez pourquoi, malgré cela, l'univers est un Set.
-
Implantez la classe Universe, représentant un univers, en tant que Set.
Pensez aux méthodes qu'il faut redéfinir.
-
Créez deux méthodes static factory nommées universe qui permettent de créer un Universe
soit à partir d'une collection soit à partir d'une série d'éléments séparés par des virgules.
Pourquoi la static factory qui prend une série d'éléments affiche un warning ?
A quoi sert l'annotation SafeVarargs ?
Peut-on l'utiliser ici ?
-
Quelle est la complexité de la méthode contains ?
Changez son implantation pour améliorer la complexité.
Exercice 2 - UniverseSet
On représente les ensembles créés à partir d'un univers de façon compacte en mémoire.
Pour cela on utilisera le fait qu'un univers stocke ses éléments en leur attribuant un numéro.
On appelle UniverseSet la classe représentant un ensemble.
-
Expliquez pourquoi il est possible d'utiliser un bitset
pour stocker les éléments d'un UniverseSet.
Quel est le nom de la classe Java qui représente un bitset.
-
Que doit faire la méthode add de UniverseSet
dans le cas où l'élément n'appartient pas à l'univers ?
Attention à bien lire la doc de BitSet lorsque vous implanterez size().
De plus, à quoi servent les méthodes BitSet.nextClearBit et BitSet.nextSetBit?
-
Pourquoi doit-on implanter isEmpty, remove, contains et clear ?
Implantez-les.
-
Comment peut-on spécialiser addAll, removeAll, containsAll et retainAll
dans le cas où le paramètre est aussi un UniverseSet.
Implantez-les.
-
Modifiez addAll, removeAll, containAll et retainAll
pour les spécialiser au cas où la collection en paramètre est l'univers.
-
Ecrivez trois méthodes newSet qui crée un UniverseSet.
Une sans argument, une autre prenant en paramètres une collection
et la dernière prenant des arguments séparés par des virgules.
Comment peut-on utiliser l'annotation @SafeVarargs ici ?
© Université de Marne-la-Vallée