Copie un arraylist dans un autre

gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010 - 22 juil. 2010 à 12:11
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010 - 22 juil. 2010 à 18:07
bonjour

lorsque je fait une copie d'un arralylist dans un autre arraylist si l'un d'entre eux et modifier le deuxième sera automatiquement modifier .
est ce qu'il y a une autre solution pour ce genre de problème
merci

lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd

12 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juil. 2010 à 15:14
Salut,

Essaye de voir avec la classe Collections pour voir si tu peux faire une copie profonde, sinon, fais là toi même : au lieu de faire des add du même objet dans ta seconde liste lorsque tu la copie, il faut faire des add d'un clone de l'objet.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 15:18
salut,

j'ai déjà essayé avec collection mais lors de l'exécution il y a des exception qui s'affiche

lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juil. 2010 à 15:21
Salut,

Quelles exceptions ? Montre nous ton code pour voir ce qui cloche
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 15:33
salut,

en faite j'ai un arraylist nommer evenliste qui contient un ensemble d'événement à partir de ce evenliste je vais parcourir tt les evenement et appliquer un traitement spécifique le résultat je vais le stocker dans autre arrlyliste nommé evenlisteP qui a la meme structure que evenliste.
mon problème c'est lorsque je modifier evenlisteP, automatiquement evenliste va être aussi modifier
ici j'ai utilisé collection
Collections.copy(evenlisteP,evenliste);

ici j'ai modifier evenlisteP
((ArrayList<String>) ((ArrayList>) evenlisteP.get(n).get(m).get(o)).get(p).get(q)).set(9,var);

voila les exceptions :
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Unknown Source)
at StructureAgr1.remplirezone(StructureAgr1.java:274)
at StructureAgr1.structure(StructureAgr1.java:1957)
at Main.main(Main.java:14)

merci,



lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juil. 2010 à 15:36
Salut,

Ok, apparemment il faut que la liste de destination soit initialisée à la même taille que la liste d'origine.

A ce moment là, fait une copie profonde manuelle :
for (Object objet : taListeSource) {
taListeDest.add(objet.clone());
}
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 16:23
salut,

j'ai essayé votre méthode mais il y a un message d'erreur qui s'affiche quand j'utilise la méthode clone ()
for(Object ob:evenliste)
evenlisteP.add((ArrayList>)ob.clone());

voila le message d'erreur :
The method clone() from the type Object is not visible

merci,

lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juil. 2010 à 16:27
Salut,

Il faut travailler sur les types concrets contenus dans tes listes : pas des Object, essaye ainsi :
for(Object ob:evenliste)
evenlisteP.add(((ArrayList>)ob).clone());
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 16:54
salut,

c'est toujours le même problème il modifie le evenlisteP et evenliste

lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juil. 2010 à 17:21
Salut,

Même en clonant tes objets ? Est-ce que tu as surchargé la fonction clone de tes objets afin de cloner non seulement ses données intrinséques, mais cloner également les listes/hash/set, etc. ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 17:35
Salut,

j'ai fait ce que vous m'avez conseillé
for(Object ob:evenliste)
{
evenlisteP.add((ArrayList>) ((ArrayList>)ob).clone());
evenlisteA.add((ArrayList>) ((ArrayList>)ob).clone());
}
mais j'ai pas compris qu'est vous voulez dire par " Est-ce que tu as surchargé la fonction clone de tes objets afin de cloner non seulement ses données intrinséques, mais cloner également les listes/hash/set, etc."

lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juil. 2010 à 18:05
Salut,

Et bien je ne pense pas (à vérifier, mais apparemment c'est le cas) que la méthode close de l'ArrayList fait une copie profonde : je pense qu'elle se contente de copier les pointeurs des objets, et ne fait pas une copie réelle des données des objets (pour des raisons de performances), du coup, si tu en modifie un quelque part, ca le modifie pour toutes les listes qui le contiennent.

Je te laisse lire ceci.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
gaaloullotfi Messages postés 8 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 18:07
Salut,

je te remercie pour ton aide.

lotfi gaaloul 
eleve ingenieur
www.lotfi-gaaloul.fr.gd
0
Rejoignez-nous