Adloun

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 HashSet ne 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 à contains examine les éléments déjà retenus : comparaisons. Pour , cela fait environ comparaisons.
  • Un ensemble ignore les doublons ; le LinkedHashSet conserve en plus l'ordre de première insertion, et son contains est en temps constant en moyenne. Un HashSet perdrait l'ordre (son parcours est imprévisible), un TreeSet rangerait les mots par ordre alphabétique.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →