On définit la méthode suivante :
<E> void printElems(Collection<E> elems) {
for (E e : elems) {
System.out.println(e.toString());
}
}
Soient les codes suivants :
A.
List<String> list = List.of("l'ovomaltine", "c'est", "de", "la", "dynamique");
printElems(list);
B.
Set<String> set = new HashSet<>();
set.add("l'ovomaltine");
set.add("c'est");
set.add("de");
set.add("la");
set.add("dynamique");
printElems(set);
C.
Set<String> set = new TreeSet<>();
set.add("l'ovomaltine");
set.add("c'est");
set.add("de");
set.add("la");
set.add("dynamique");
printElems(set);
Quelle affirmation est correcte ? Choisissez la réponse la plus précise.
A. A et B affichent la même chose
B. A et C affichent la même chose
C. B et C affichent la même chose
D. Tous les codes affichent la même chose
E. Tous les codes affichent quelque chose de différent
Solution
Attention, c’est un piège très typique en programmation ! Une List est toujours ordonnée (donc le programme A affichera les mots dans l’ordre donné) mais un Set n’est pas (forcément) ordonné !
On peut d’ores et déjà éliminer les réponses A, B et D.
Ensuite, un Set peut aussi avoir un ordre différent en fonction de son implémentation. Tous les Set n’ordonnent pas leurs éléments de la même manière ! Nous n’avons donc aucune garantie sur l’ordre dans lequel les éléments seront affichés. En l’occurence, B et C affichent les éléments dans un ordre différent.
La réponse correcte est la E