Petite question d'algo ou de gestion de la mémoire en Java :
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 :
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(); }
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 :
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 ^^)
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(); }
Partager