:: Enseignements :: Master :: M1 :: 2014-2015 :: Java Avancé ::
[LOGO]

Set et List


Implantation des interfaces Set et List.

Exercice 1 - Sets et read-only Set

Le but de cet exercice est d'écrire des méthodes qui renvoie des vues non modifiables d'ensemble.

  1. Rappeler ce qu'est un ensemble java.util.Set.
  2. A quoi sert la classe java.util.AbstractSet et quelles sont les méthodes qui doivent être implantées.
  3. Ecrire dans une classe fr.umlv.colls.Sets, une méthode asReadOnlySet qui prend un Set et renvoie un Set non modifiable.
    Vérifier que votre implantation est bonne avec le test unitaire suivant: SetsTest.java.
  4. Ecrire une méthode asReadOnlyEntrySet qui prend une java.util.Map en paramètre et renvoie un Set non modifiable des couples clés/valeurs.
    Pourquoi ne peut-on pas appeler la méthode asReadOnlySet avec map.entrySet() ?
    Conseil: regarder la javadoc de java.util.Map.Entry.
  5. On remarque que le code de asReadOnlySet et de asReadOnlyEntrySet est franchement similaire, comment faire un seul code commun qui pourra être utilisée par les deux méthodes.

Exercice 2 - Lists

Le but de cet exercice est d'écrire deux méthodes statiques renvoyant des listes particulières à l'intérieur d'une classe fr.umlv.colls.Lists.

  1. Rappeler à quoi servent les classes AbstractList, AbstractSequentialList et RandomAccess.
  2. Ecrire une méthode range qui prend, en paramètre, un index start et un index end et qui renvoie une liste dont les éléments sont les éléments compris entre start et end (start et end étant inclues).
    L'astuce est que l'on n'est pas obligé de stocker les éléments entre start et end. On peut juste faire en sorte que l'implantation renvoie les éléments entre start et end.
    Vérifier que votre implantation est bonne avec le test unitaire suivant: ListsTest.java.
  3. On souhaite maintenant écrire une méthode times qui prend en paramètre un multiplicateur et une liste d'entiers, et qui renvoie une nouvelle liste où chaque entier à la position i a pour valeur l'entier à la position i dans la liste passée en paramètre multipliée par le multiplicateur.
  4. Expliquer pourquoi le test slooowTimes timeout ?
    Comment corriger le problème ?
  5. Implanter la solution retenue.