:: Enseignements :: Master :: M1 :: 2008-2009 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Map, list, capture, itérable, itérateur |
Vous trouverez
içi
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;
}
-
Expliquer ce que fait le code ci-dessous :
Map<Author,String> tels=new HashMap<Author,String>();
Author danBrown=new Author("Dan","Brown");
tels.put(danBrown,"001-745-897");
System.out.println(tels.get(danBrown));
System.out.println(tels.get(new Author("Dan","Brown")));
-
Faites les changements qui s'imposent pour que le code
marche de façon plus logique.
-
Notez que
Author
est non mutable, comment peut-on faire pour accélérer
les accès à la table de hachage sachant cela ?
Exercice 2 - Capture de carte sauvage
On souhaite implanter un algorithme permettant de mélanger les
éléments d'une liste dans un ordre aléatoire.
-
Indiquer un algorithme possible pour cela. Quel est la
complexité de celui-ci ?
-
Implanter une méthode
swap
suivant la documentation suivante :
/** Swaps the elements at the specified positions in the specified list.
* (If the specified positions are equal, invoking this method leaves the list
* unchanged.)
* @param list the list in which to swap elements.
* @param i the index of one element to be swapped.
* @param j the index of the other element to be swapped.
* @throws IndexOutOfBoundsException if either i or j is out of range.
*/
-
Que doit-on faire pour que la méthode
swap
ait la signature suivante :
void swap(List<?> list,int i,int j);
-
Ecrire une méthode
shuffle
utilisant la méthode
swap
pour permuter les valeurs.
La classe
java.util.Random
est un générateur pseudo-aléatoire.
-
En supposant que l'on veuille répartir les élements de
façon aléatoire entre deux listes, expliquer pourquoi la
capture ne marche pas avec une méthode ayant la
signature suivante :
void shuffle(List<?> list1,List<?> list2);
-
Quelle est la complexité du code que vous avez écrit pour shuffle ?
Dans le cas où la liste est une LinkedList ? Comment améliorer
cette dernière complexité ?
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
-
Quel est le profil de la méthode
rangeIterator
?
-
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
-
Quel est le profil de la méthode
range
?
-
Écrire une implantation utilisant la méthode
rangeIterator
ainsi qu'une version en une seule méthode.
-
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);
© Université de Marne-la-Vallée