:: Enseignements :: ESIPE :: E3INFO :: 2008-2009 :: Programmation Objet avec Java ::
[LOGO]

Table de hachage, iterateur, liste


Exercice 1 - Association et contrat sur les Objets

Sachant que la classe Pair est définie comme ceci :
     public class Pair<U, V> {
       private final U first;
       private final V second;

       public Pair(U first, V second) {
         this.first=first;
         this.second=second;
       }
       public U getFirst() {
         return first;
       }
       public V getSecond() {
         return second;
       }
       @Override
       public String toString() {
         return first+" "+second;
       }
     }
     
Pourquoi le code ci-dessous n'affiche pas ce qu'il faut ?
    HashMap<Pair<String,String>,String> map=new HashMap<Pair<String,String>,String>();
    map.put(new Pair<String,String>("jean-paul","sartre"),"mort");
    map.put(new Pair<String,String>("elvis","presley"),"vivant");

    map.remove(new Pair<String,String>("elvis","presley"));

    System.out.println(map);
   
Que doit-on faire pour résoudre le problème ?

Exercice 2 - La vue qui baisse

On cherche à ecrire une fonction half qui prend en paramètre une List<Integer> et qui renvoie un Iterator<Integer> dont chaque valeur est la moitié de la précédente.

  1. Dans un premier temps, créer une liste temporaire et renvoyé son iterateur.
  2. Créer une classe HalfListIterator qui respecte l'interface d'un iterateur de veleur, qui prend la liste lors de sa construction et utilise l'iterateur de cette liste pour implanter ses méthodes. L'astuce consistera à renvoyer la valeur divisée par deux au moment du parcours.
  3. Quel est l'intérêt de la deuxiéme version par rapport à la première ?

Exercice 3 - Performance sur les listes

Le but de cet exercice est de tester les différences de performance entre les classes ArrayList et LinkedList sur différents algorithmes.

  1. Nous allons dans un premier temps chronométrer le temps d'un parcours d'une ArrayList contenant un million (1 000 000) d'entiers en utilisant un Iterator puis un index pour le parcours.
    Utilisez la méthode System.nanoTime() pour effectuer une mesure de temps.
  2. Modifier votre programme pour pouvoir facilement chronométrer le parcours dans le cas d'une ArrayList ou d'une LinkedList avec le même code.
Effectuer les tests suivants sur les deux implémentations de List : Comparer les différents résultats et expliquer les différences.