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

Langage Java Discussion :

modification liste en cours exécution


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut modification liste en cours exécution
    Bonjour,
    j'essaye de modifié une liste ou je suis en train d'itérer.
    Il me lance une exception "ConcurrentModificationException" qui est pour l'accès concurrent.
    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Iterator e=liste.iterator();
    		while (e.hasNext()) 
    		{
    				liste.addAll(parcoursPage( e.next().toString()	));  
    		}
    Le but et de faire du récursif. Pour le moment, je ne me préoccupe pas de l'arrêt.

    Merci de votre aide...

    Mickael

  2. #2
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Salut, on ne peut pas modifier une liste sur laquelle on est en train d'itérer avec un iterator normal.

    Mais :

    The List interface provides a special iterator, called a ListIterator, that allows element insertion and replacement, and bidirectional access in addition to the normal operations that the Iterator interface provides. A method is provided to obtain a list iterator that starts at a specified position in the list.
    http://java.sun.com/javase/6/docs/ap...tIterator.html

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Je test et ensuite je te donne la resultat..

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    cela ne marche pas.

  5. #5
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Tu dois utiliser la méthode de l'itérateur et non la méthode de la liste.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    List maListe = new ArrayList();
    ListIterator it = maListe.listIterator();
    // ...
      it.add(new Object()); // la méthode addAll n'existe pas sur l'itérateur  
    // ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Je ne comprends pas.

    Si un itérateur est un "pointeur" vers un objet et que l'on ajoute un objet à l'itérateur alors cette objet devrais se trouver dans l'objet pointé par l'itérateur.
    Car dans ma méthode,

    je parcours une liste grâce a un iterateur.
    tant que itérateur++ faire
    {
    Pour chaque élement de la liste il me retourne une nouvelle liste.
    Cette liste retourné je l'ajoute à mon itérateur.
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public static void methode(ArrayList<String> listes) throws IOException
    {
    ListIterator<String> e = listes.listIterator();
    ListIterator<String> f = tmp2.listIterator();
    ArrayList<String> tmp2 = new ArrayList<String>();
    String tmp;
     
    try{
    	while (e.hasNext()) 
    			{
    				tmp2=parcoursPage( e.next().toString());
    				while (f.hasNext()) 
    				{
    					tmp=f.next().toString();
    					if(listes.contains(tmp)==false) 
    						e.add(tmp);
    				}
    } ....
    mais il ne boucle pas à "l'infini" ou presque comme souhaité (pas fait le test d'arrêt).

  7. #7
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Si j'ai bien compris, la méthode parcoursPage te renvoit une nouvelle liste. Il y a donc un new ArrayList() quelque part dedans.

    tmp2 reçoit donc une nouvelle liste, un nouvel objet.
    Ton itérateur f a été créé à partir d'une liste vide (tmp2). tmp2 ne pointe plus sur le même objet après l'appel à parcoursPage. Ton itérateur, lui, pointe toujours sur l'ancienne liste.

    Tu devrais donc plutôt déclarer ton itérateur f à l'intérieur de la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public static void methode(ArrayList<String> listes) throws IOException
    {
    ListIterator<String> e = listes.listIterator();
    ArrayList<String> tmp2;
    String tmp;
     
    try{
      while (e.hasNext()){
        tmp2=parcoursPage( e.next().toString());
        ListIterator<String> f = tmp2.listIterator();				
        while (f.hasNext()){
          tmp=f.next().toString();
          if(listes.contains(tmp)==false) e.add(tmp);
        }				
    } ....

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Pourtant
    je créé un itérateur sur une liste vide. Ensuite, je remplis ma liste par un appel de fonction qui me retourne une lise. Alors mon itérateur pointe sur ma liste contenant le retour de la fonction.

  9. #9
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Non, tu crées un itérateur sur un objet A référencé par la variable tmp2.

    Ensuite tu appelles parcoursPage qui affecte un objet B à la variable tmp2.

    Ton itérateur est toujours "attaché" à l'objet A mais c'est l'objet B que tu veux parcourir.

    Essaie avec le code que je t'ai donné plus haut.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Oui
    j'ai testé et .... ça fonctionne, mais je voulais de la théorie (je suis plus dans la théorie).

    Maintenant je me heurte à d'autre problème...

    Je te remercie pour les infos et le temps passé.

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

Discussions similaires

  1. liste déroulante & double exécution
    Par deuiz dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 10/03/2008, 14h16
  2. Réponses: 2
    Dernier message: 04/02/2007, 19h48
  3. Recherche + Modification liste
    Par jinjung dans le forum Langage
    Réponses: 5
    Dernier message: 07/12/2006, 15h30
  4. Modification liste deroulante avec GTK
    Par le_sonic dans le forum GTK+ avec C & C++
    Réponses: 15
    Dernier message: 04/08/2006, 00h48

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