programmation Java (école d'ingénieur) · Chapitre 12 · Application directe du cours
Retirer les doublons
Collections et génériques · niveau 2
Énoncé
Écrire une méthode
static List<String> sansDoublons(List<String> l)
qui renvoie la liste des éléments de l sans doublon, dans l'ordre de leur première apparition. Exemple : [rouge, vert, rouge, bleu, vert, jaune] donne [rouge, vert, bleu, jaune].
- Écrire une première version avec une liste résultat et
contains. Combien de comparaisons fait-elle, au pire, pour une liste de éléments tous distincts ? - Écrire une version en une ligne avec un ensemble bien choisi. Pourquoi un
HashSetne conviendrait-il pas ?
Corrigé
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
public class Exo3Doublons {
// Version 1 : quadratique, avec contains sur la liste résultat.
static List<String> sansDoublonsNaif(List<String> l) {
List<String> r = new ArrayList<>();
for (String s : l) {
if (!r.contains(s)) r.add(s);
}
return r;
}
// Version 2 : un LinkedHashSet garde l'ordre d'insertion et ignore les doublons.
static List<String> sansDoublons(List<String> l) {
return new ArrayList<>(new LinkedHashSet<>(l));
}
public static void main(String[] args) {
List<String> l = List.of("rouge", "vert", "rouge", "bleu", "vert", "jaune");
System.out.println(sansDoublonsNaif(l));
System.out.println(sansDoublons(l));
}
}
[rouge, vert, bleu, jaune]
[rouge, vert, bleu, jaune]
- Si les éléments sont distincts, le -ième appel à
containsexamine les éléments déjà retenus : comparaisons. Pour , cela fait environ comparaisons. - Un ensemble ignore les doublons ; le
LinkedHashSetconserve en plus l'ordre de première insertion, et soncontainsest en temps constant en moyenne. UnHashSetperdrait l'ordre (son parcours est imprévisible), unTreeSetrangerait les mots par ordre alphabétique.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.