gaaloullotfi
Messages postés8Date d'inscriptionmercredi 24 septembre 2008StatutMembreDernière intervention22 juillet 2010
-
22 juil. 2010 à 12:11
gaaloullotfi
Messages postés8Date d'inscriptionmercredi 24 septembre 2008StatutMembreDernière intervention22 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
gaaloullotfi
Messages postés8Date d'inscriptionmercredi 24 septembre 2008StatutMembreDernière intervention22 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);
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)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
gaaloullotfi
Messages postés8Date d'inscriptionmercredi 24 septembre 2008StatutMembreDernière intervention22 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
gaaloullotfi
Messages postés8Date d'inscriptionmercredi 24 septembre 2008StatutMembreDernière intervention22 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."
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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