Itérateurs

Parcourir une collection sans connaître sa représentation : l'itérateur et ses trois méthodes, la boucle pour chaque, le parcours d'un dictionnaire, et ce qui se passe quand on modifie la collection pendant le parcours.

  • 26 cartes
  • 5 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. Les étapes
  5. Mises en situation

Quelques cartes du deck

  • Itérateur : de quoi s'agit-il ?

    Voir la réponse

    Objet qui parcourt une collection élément par élément et sait s'il en reste un, sans exposer la façon dont la collection est rangée.

    En Java, Iterator<E> a trois méthodes : hasNext(), next() et remove(). Le même code parcourt une liste, un ensemble ou les clés d'un dictionnaire.

  • Que produit ce programme ?

    ```java
    Iterator<Integer> it = List.of(1, 2, 3).iterator();
    while (it.hasNext()) {
    System.out.println(it.next() + " " + it.next());
    }
    `

    • Il affiche 1 2 puis s'arrête sur NoSuchElementException
    • Il affiche 1 2 puis 3 3 au second tour de la boucle
    • Il affiche 1 2 puis 3 null au second tour de la boucle
    • Il affiche 1 2 puis s'arrête normalement, la boucle finie sans erreur
    Voir la réponse

    Il affiche 1 2 puis s'arrête sur NoSuchElementException

    hasNext() n'est vérifié qu'une fois par tour, mais le corps appelle next() deux fois. Au second tour il reste le 3 : le premier next() le lit, le second n'a plus rien à donner.

  • Un itérateur se pilote avec … pour savoir s'il reste un élément, et … pour le lire et avancer.

    Voir la réponse

    Un itérateur se pilote avec hasNext pour savoir s'il reste un élément, et next pour le lire et avancer.

    On appelle hasNext() avant chaque next(). Appeler next() quand il ne reste rien lève NoSuchElementException.

  • Iterable : de quoi s'agit-il ?

    Voir la réponse

    Interface Java des objets capables de fournir un itérateur : une seule méthode, iterator().

    List et Set l'implémentent ; Map non, d'où l'erreur « for-each not applicable to expression type » sur for (String k : map). Une classe à nous qui l'implémente peut s'utiliser dans une boucle pour chaque.

  • Retirer les valeurs négatives avec un itérateur : quelle étape vient après « Obtenir l'itérateur de la liste » ?

    • Lire l'élément courant avec next()
    • Comparer cet élément à 0
    • Tester hasNext() pour savoir s'il reste un élément
    • Appeler remove() sur l'itérateur si l'élément est négatif
    Voir la réponse

    Tester hasNext() pour savoir s'il reste un élément

    Le next() doit précéder le remove(), qui retire l'élément que next() vient de renvoyer. Le test hasNext() ouvre chaque tour et protège contre NoSuchElementException.