Petite question d'algo ou de gestion de la mémoire en Java :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Vector<Vector<Object>> DataVec ;
Vector<Object> ColVec;
Vecor<Object> TmpVec;
 
for (int i=0; i<10; i++){
			int j = 0;
			while (j < 10){
				ColVec.addElement ("pipou");
				j++;
			}
			DataVec.addElement(ColVec);
			ColVec.clear();
		}
C'est du vrai code mais que j'ai simplifié du coup il n'a aucun intérêt tel quel mais c'est l'algo qui compte. En faisant ça je me suis rendu compte que :

DataVec.elementAt(0).size()

renvoyait 0. Autrement dit le ColVec.clear() vide aussi le vector qui a déjà été ajouté au vector DataVec. Je trouve ça bizarre car je pensais que addElement() réservait un nouvel espace mémoire dans lequel on clone() le ColVec et qu'on le rajoutait à DataVec, une vraie copie en somme. Du coup j'ai du feinter en faisant moi même le clone () et en l'écrasant à chaque fois avant de l'ajouter :

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
 
Vector<Vector<Object>> DataVec ;
Vector<Object> ColVec;
Vecor<Object> TmpVec;
 
for (int i=0; i<10; i++){
			int j = 0;
			while (j < 10){
				ColVec.addElement ("pipou");
				j++;
			}
			TmpVec = (Vector<Object>)ColVec.clone ();
			DataVec.addElement(TmpVec);
			ColVec.clear();
		}
Trouvez vous ça normal? M'y suis-je mal pris? Comment feriez vous? Car la méthode du clone() me parait quand même pas très propre (précision: pas le droit de tricher en utilisant des tableaux ^^)