:: Enseignements :: Master :: M1 :: 2010-2011 :: Java Avancé ::
[LOGO]

Map, list, capture, itérable, itérateur


Vous trouverez ici quelques notes concernant ce td.

Exercice 1 - Prendre de la hauteur

Soit la classe fr.umlv.td.author.Author :
public class Author {
	 public Author(String firstName,String lastName) {
	    this.firstName=firstName;
	    this.lastName=lastName;
	 }
	 public @Override String toString() {
	    return firstName+' '+lastName;
	 }
	 private final String firstName;
	 private final String lastName;
}

Exercice 2 - J'en veux plus

On cherche à implanter la méthode twice qui prend une liste d'entiers et qui renvoie une nouvelle liste contenant les valeurs de la liste multipliées par deux.

  1. Implanter la méthode twice .
  2. Changer l'implantation pour allouer moins d'éléments en utilisant le concept de vue.
    Pour l'implantation, regarder du côté de java.util.AbstractList .
  3. Quel est le problème de votre implantation dans le cas d'un appel à twice avec une LinkedList ?
    Tester avec le code suivant :

  4. Changer l'implantation de twice en fonction du fait que la liste prise en paramètre implante ou non java.util.RandomAccess .

Exercice 3 - Interval

On souhaite pouvoir écrire le code suivant :
Iterator<Integer> it=rangeIterator(1,5);
for(;it.hasNext();)
   System.out.println(it.next()); // affiche 1 2 3 4 5

  1. Quel est le profil de la méthode rangeIterator ?
  2. Implanter cette méthode en utilisant une classe anonyme.
On souhaite maintenant pouvoir écrire le code suivant :
for(int i:range(1,5))
System.out.println(i); // affiche 1 2 3 4 5

  1. Quel est le profil de la méthode range ?
  2. Écrire une implantation utilisant la méthode rangeIterator ainsi qu'une version en une seule méthode.
  3. Combien le code donné en exemple effectue-t-il d'allocations ?
    Et le code ci-dessous ?
    for(int i:range(190,200))
       System.out.println(i);
    
    La réponse se trouve dans le code de la méthode valueOf(int i) de la classe Integer (accès par ctrl+clic gauche dans eclipse).