ArrayList qui se met à jour

ArrayList qui se met à jour - Java - Programmation

Marsh Posté le 31-12-2010 à 20:46:29    

Bonsoir, :hello:  
 
J'ai un souci avec une ArrayList qui se met à jour toute seule.
Voici le morceau de code qui pose souci :

Citation :

ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> b = new ArrayList<Integer>();
System.out.println(a); // affiche []
b.add(1);
b.add(2);
a.add(b);
System.out.println(a); // affiche [[1, 2]]
b.clear();
System.out.println(a); // affiche [[]]


 
Je ne comprends pas pourquoi le contenu de a se met à jour quand on vide b.
Pour ma part, je pensais qu'une fois qu'on mettait le contenu de b dans a, on pouvait changer b sans cela change a.
 
Des conseils/idées pour que le contenu de a ne soit pas affecté par les changements de b ?
 
Merci & bonne année 2011 !


---------------
"Les animaux sont moins intolérants que nous : un cochon affamé mangera du musulman." Desproges
Reply

Marsh Posté le 31-12-2010 à 20:46:29   

Reply

Marsh Posté le 31-12-2010 à 21:16:55    

En java, tu manipules des references et non pas des objets (contrairement au C++).
 
Donc quand tu fais "a.add(b)", "a" contient une reference vers le meme objet. Si ce n'est pas le comportement que tu souhaites, tu dois explicitement faire une copie:

  • a.add(new ArrayList<Integer>(b))
  • via clone(), a.add( (ArrayList<Integer> )b.clone()).


Message édité par mr simon le 31-12-2010 à 21:23:28
Reply

Marsh Posté le 31-12-2010 à 22:07:00    

Merci :jap: Effectivement, ça marche avec la 1ère méthode. Il y a une des 2 méthodes à privilégier ?


---------------
"Les animaux sont moins intolérants que nous : un cochon affamé mangera du musulman." Desproges
Reply

Marsh Posté le 31-12-2010 à 22:17:09    

La methode clone peut se reveler problematique sur certains types (pas de problemes a priori sur Integer et ArrayList). Certaines personnes preferent l'eviter, donc je dirais la premiere, mais ce n'est que mon humble avis.
 

Reply

Marsh Posté le 31-12-2010 à 22:35:46    

Ok, merci :jap:


---------------
"Les animaux sont moins intolérants que nous : un cochon affamé mangera du musulman." Desproges
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed