IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

exception ConcurrentModificationException LinkedList


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut exception ConcurrentModificationException LinkedList
    salut ,

    j'ai un petit souci avec LinkedList.
    quand j'ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LinkedList listeChainee = new LinkedList();
    		listeChainee.add("element 1");
    		listeChainee.add("element 2");
    		listeChainee.add("element 3");
    		Iterator iterator = listeChainee.iterator();
    		while (iterator.hasNext()) {
    		      System.out.println("objet = "+iterator.next());
    		}
    J'aurais aucun probleme, mais lorsque j'ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LinkedList listeChainee = new LinkedList();
    		Iterator iterator = listeChainee.iterator();
    		listeChainee.add("element 1");
    		listeChainee.add("element 2");
    		listeChainee.add("element 3");
    		while (iterator.hasNext()) {
    		      System.out.println("objet = "+iterator.next());
    		}
    une eception est levé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Exception in thread "main" java.util.ConcurrentModificationException
    	at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
    	at java.util.LinkedList$ListItr.next(Unknown Source)
    	at Linked1.main(Linked1.java:18)
    d'aprés ce que j'ai lu:une exception de type CurrentModificationException levée si un iterator parcours la liste alors qu'un autre fait des mises à jour (ajout ou suppression d'un élément dans la liste).

    mais danas mon cas, j'ai un seul Iterator, et en plus mon itarator ne fait pas la mise à jour.

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    J'ai réussis à choper ceci à un endroit de la Javadoc :
    The iterators returned by this class's iterator and listIterator methods are fail-fast: if the list 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.
    Il est donc mentionné qu'à partir du moment où l'iterator est créé, si une modification sur la liste est faites autre que par l'iterator (ajout/suppression), il sera levé une ConcurrentModificationException.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Il est donc mentionné qu'à partir du moment où l'iterator est créé, si une modification sur la liste est faites autre que par l'iterator (ajout/suppression), il sera levé une ConcurrentModificationException.
    Du moins jusqu'à ce que cet Iterator soit lâché.
    Autrement dit, si tu fais un Iterator, tu t'en sers, puis tu arrêtes de t'en servir et tu oublies qu'il a existé, à ce moment là tu peux recommencer à lire/modifier ta liste comme tu veux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    donc, d'aprés ce que j'ai compris, il est preferable d'affecter un iterator à une liste qu'aprés avoir terminer toutes les mise à jour sur la liste?

    un autre petit soucis, un itrtor sert à parcourir une liste, pourquoi vous me dite iterator(ajout/suppression).

    Merci d'avance

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un iterator a des méthode de suppression (par contre pas d'ajout). On peux supprimé le dernier élément qui a été renvoyé par la méthode next() de la collection via un appel à remove().

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par sitws Voir le message
    donc, d'aprés ce que j'ai compris, il est preferable d'affecter un iterator à une liste qu'aprés avoir terminer toutes les mise à jour sur la liste?
    Pas forcément. Ce qui compte c'est de ne pas se servir de l'Iterator mélangé à des modifications de la liste.
    Quand on a fini de se servir d'un Iterator et qu'on n'y touchera plus jamais, on peut à nouveau faire des modifs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exception "ConcurrentModificationException" et les ArrayList
    Par allouchi dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 19/03/2012, 19h51
  2. Serveur multithread - Exception : java.util.ConcurrentModificationException
    Par rXpCH dans le forum Développement Web en Java
    Réponses: 13
    Dernier message: 08/07/2009, 09h19
  3. [JDOM] Exception:Exception in thread "main" java.util.ConcurrentModificationException
    Par solawe dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 10/06/2009, 18h33
  4. Réponses: 5
    Dernier message: 02/06/2008, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo