Comparer et trier des objets

Donner un ordre à des objets : l'ordre naturel avec compareTo et le signe de son résultat, le comparateur externe, les critères successifs, le tri d'une collection et la cohérence avec l'égalité.

  • 25 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Comparable : de quoi s'agit-il ?

    Voir la réponse

    Interface Java dont la méthode compareTo donne à une classe son ordre naturel, utilisé par défaut pour trier ses instances.

    a.compareTo(b) renvoie un entier négatif, nul ou positif. String et Integer l'implémentent ; pour nos classes, c'est à nous d'écrire implements Comparable<Etudiant>.

  • Quel est le signe de "pomme".compareTo("poire") ?

    • Positif : "pomme" vient après "poire"
    • Négatif : "pomme" est plus courte
    • Nul : les deux mots commencent par "po"
    • Négatif : "m" vient avant "i" dans l'alphabet
    Voir la réponse

    Positif : "pomme" vient après "poire"

    Les deux mots diffèrent à la troisième lettre : "m" contre "i". "i" vient avant "m", donc "poire" précède "pomme" et le résultat est positif (4, l'écart des codes). Les longueurs ne comptent qu'en cas de préfixe commun.

  • a.compareTo(b) renvoie un entier … si a vient avant b, … si l'ordre ne les distingue pas, et … si a vient après b.

    Voir la réponse

    a.compareTo(b) renvoie un entier négatif si a vient avant b, nul si l'ordre ne les distingue pas, et positif si a vient après b.

    Seul le signe compte, pas la valeur : "chat".compareTo("chien") vaut -8, mais tout négatif signifierait la même chose.

  • Comparateur : de quoi s'agit-il ?

    Voir la réponse

    Objet externe, séparé de la classe triée, qui compare deux objets et définit un ordre au choix de l'appelant.

    Comparator<T> a une méthode compare(a, b). On peut avoir plusieurs ordres pour la même classe (par nom, par moyenne), ce que compareTo seul ne permet pas.

  • Une application doit afficher les mêmes étudiants tantôt triés par nom, tantôt par moyenne. Quelle conception choisir ?

    • Modifier compareTo avant chaque tri pour changer de critère
    • Un comparateur par critère, passé à sort selon le choix
    • Dupliquer la classe : EtudiantParNom et EtudiantParMoyenne
    • Trier une première fois, puis lire la liste à l'envers pour l'autre critère
    Voir la réponse

    Un comparateur par critère, passé à sort selon le choix

    compareTo ne définit qu'un ordre, fixé dans la classe. Plusieurs ordres pour la même classe, c'est précisément la raison d'être des comparateurs externes. Lire à l'envers ne change pas le critère.