Generics, wildcard, iterable, iterateur
Exercice 1 - Carte sauvage
-
Pourquoi le code ci-dessous ne compile-t-il pas ?
private static void print(List<Object> list) {
for(Object o:list)
System.out.println(o);
}
public static void main(String[] args) {
List<String> list=Arrays.asList(args);
print(list)
}
Que doit-on changer pour qu'il compile ?
-
On veut écrire la méthode printLength
prenant en paramètre une liste d'objet implantant l'interface
CharSequence et affichant
la longueur des chaînes de caractères de la liste.
Exercice 2 - Générification
-
Générifier le code ci-dessous :
public static List listLength(List list) {
ArrayList length=new ArrayList();
for(int i=0;i<list.size();i++) {
CharSequence seq=(CharSequence)list.get(i);
length.add(seq.length());
}
return length;
}
public static void main(String[] args) {
List l=Arrays.asList(args);
System.out.println(listLength(l));
}
-
En utilisant une variable de type T
-
En utilisant la notation wildcard.
-
À quoi sert la constante Collections.EMPTY_LIST ?
Comment peut-on l'utiliser dans l'implantation de
la méthode listLength() ?
-
Changer l'implantation de la méthode listLength()
pour utiliser la méthode emptyList de la classe
java.util.Collections.
Exercice 3 - C'est loin la merge
On souhaite écrire une méthode permettant de fusionner
deux listes List pour obtenir une liste
contenant alternativement un élement de chaque liste.
La méthode devra s'assurer que les deux listes ont la même
taille.
-
Quel est le profil de la méthode merge
(le plus générique possible)
sachant que le code suivant est valide.
List<String> list1=...
List<StringBuilder> list2=...
List<? extends CharSequence> result1=merge(list1,list2);
List<?> result2=merge(list1,list2);
-
Implanter la méthode merge créant une nouvelle liste.
La signature de la méthode devra être la plus générique possible.
Indiquer sans implanter de nouveau code quelle est la complexité de
la solution choisie si une des liste est uneLinkedList ?
-
Comment doit-on faire pour avoir une meilleur complexité ?
Ecrire la solution proposée.
Expliquer ce qu'est la capture.
Rémi Forax - Université de Marne La Vallée