Le Touilleur Express

  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express

Quelle est la différence entre un Iterator et une Enumeration ?

12 décembre, 2003

La class java.util.Vector est sans doute une des classes Java les plus pratiques. Depuis la sortie de Java 1.2 lorsque vous devez énumerer (lister) le contenu d’un Vector, vous pouvez utiliser la méthode « à l’ancienne » comme dans cet exemple:

    Vector v=new Vector();
    String prenom=new String("Arnold");
    String nom=new String("Governator of California");
    Integer numb=new Integer(3);

    v.addElement(prenom);
    v.addElement(nom);
    v.addElement(numb);

    for(Enumeration e=v.elements() ; e.hasMoreElements() ; ) {
        System.out.println(e.nextElement());
    }

Lorsque ce programme est executé nous obtenons:

Arnold Governator of California 3

Maintenant si je rajoute à ce programme la version java 1.2 utilisant un iterator nous avons:

     Vector v = new Vector();
        String prenom = new String("Arnold");
        String nom = new String("Governator of California");
        Integer numb = new Integer(3);

        v.addElement(prenom);
        v.addElement(nom);
        v.addElement(numb);
        System.out.println("Version java 1.1:");
        for (Enumeration e = v.elements(); e.hasMoreElements();) {
            System.out.print(e.nextElement());
            System.out.print(' ');
        }
        System.out.println("\nVersion java 1.2:");
        for(Iterator i=v.iterator() ; i.hasNext();){
            System.out.print(i.next());
            System.out.print(' ');
        }

L’execution donnera:

Version java 1.1:
Arnold Governator of California 3
Version java 1.2:
Arnold Governator of California 3

La question est la suivante: quelle est la différence entre un Iterator et une Enumeration ? la réponse se trouve dans la javadoc de la classe java.util.Vector dans ce paragraphe:
[…]The Iterators returned by Vector’s iterator and listIterator methods are fail-fast: if the Vector is structurally modified at any time after the Iterator is created, in any way except through the Iterator’s own remove or add methods, the Iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the Iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future. The Enumerations returned by Vector’s elements method are not fail-fast.

En clair cela veut dire que si vous utilisez un Iterator lors de la lecture du Vector, vous êtes assuré que si quelqu’un venait à modifier un des élements du vecteur, alor une exception ConcurrentModificationException sera levée, ce qui n’est pas le cas lorsque l’on utilise une Enumeration. Dans le cas d’un programme mutli-threadé, il est donc important d’utiliser ce nouveau moyen pour s’assurer que les données utilisées sont consistantes.

Articles similaires:

Default ThumbnailQuelle est la différence entre volatile et synchronized ? Default ThumbnailEt si on regardait ce qu'il y a dans cette HashMap ? Default ThumbnailComment trier un tableau en une ligne de code Default ThumbnailSynchronisation avec Vector,Hashtable,HashMap et ArrayList

Derniers articles

  • Vis ma vie de Staff/Principal Engineer

    Suite de l’article précédent sur le Staff Engineer. Aujourd’hui, voyons un peu

    20 juillet, 2022
  • Inari

    Devenir Staff Engineer : comment et pourquoi ?

    Après une dizaine d’années en tant que développeur, vous serez un jour

    17 juillet, 2022
  • WeAreDevelopers 2022, conférence à Berlin – jour 1

    Il est 8h40, 19 degrés, vous êtes à Berlin. La queue dehors

    24 juin, 2022

Tweets @nmartignole

  • RT  @e_kaspersky : This report is the beginning of the investigation of this sophisticated attack. Today we publish the first results of the…

    2 hours ago
  • RT  @e_kaspersky : We've discovered a new cyberattack against iOS called Triangulation. The attack starts with iMessage with a malicious at…

    2 hours ago
  • RT  @fcamblor :  @aheritier   @agoncal  Je suis tombé sur ça : https://t.co/SnCEnkmi0F et https://t.co/pHOHOyT9Ob Je ne savais pas que le code é…

    4 hours ago

Mots clés

Apple (32) Architecture (13) Big Data (5) Conference (8) Devoxx (55) Dev Web (37) Doctolib (2) geekevent (1) groovy (2) Innoteria (11) Java (517) Linux (10) Non classé (14) Perso (266) Recrutement (3) Scala (30) scrum (43) Société (3) Startup (20) Web 2.0 (67)

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur Twitter : @nmartignole

Copyright© 2008 - 2020 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Log In
  • My Account
  • My Profile
  • Reset Password

Le Touilleur Express