Mise à jour ArrayList

Résolu/Fermé
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 - Modifié par neocol le 13/03/2014 à 12:14
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 - 14 mars 2014 à 00:22
Salut, j'ai une question si vous permettez,

J'ai créé une fonction qui retourne une Arraylist<String> AR.cette fonction marche dans une boucle.
comment faire pour que la nouvelle AR soit ajoutée à la fin de l'ancienne AR ?
j'ai essayé deux boucles :
MaListArray (de type String) = calculate(int n);
System.out.println("MaListArray="+MaListArray);
1ére méthode
for (String st1 : MaListArray)
{
//int i;
String st1=MaListArray.get(i);
System.out.println("st1"+st1);
MaListArray.add(st1);
}
System.out.println("MaListArray apres update"+MaListArray);
2émé méthode
for(int i=0; i<MaListArray.size(); i++)
{
String st1 = MaListArray.get(i);
// System.out.println("st1"+st1);
MaListArray.add(str1);
}
System.out.println("MaListArray apres update"+MaListArray);

Mais dans les deuc cas : il me dit Unknown source , pourtant :
System.out.println("MaListArray="+MaListArray); donne le bon résultat

Merci
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
13 mars 2014 à 23:09
Tu dois faire attention à ce que tu fais. Dans tes deux codes tu ajoutes les éléments de MaListArray à elle même.

Si tu copies [1] tu vas avoir [1, 1] mais comme tu viens de rajouter un élément, la taille de ta liste vient d'augmenter, donc tu continues, tu vas donc avoir [1, 1, 1] puis [1, 1, 1, 1], etc. ton programme s'arrêtera lorsque tu n'auras plus assez de mémoire pour stocker l'infinité d'éléments que tu ajoutes au fur et à mesure.
Du moins ça c'est ce qui arriveras dans le deuxième code, car avec le premier code tu te feras jeter par une ConcurrentModificationException parce que l'iterator de la boucle for each va t'interdire de modifier la liste sur laquelle tu itères...

De toute façon, pas besoin de boucles pour faire ça. Tu as la méthode addAll qui te permet d'ajouter tout ce que tu veux à ta liste en un seul coup et sans erreur.

System.out.println(list1); // 1, 2, 3
System.out.println(list2); // 4, 5, 6
list1.addAll(list2);
System.out.println(list1); // 1, 2, 3, 4, 5, 6
0
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 1
14 mars 2014 à 00:22
Bonjour KX, c'est exactement l'erreur que j'ai trouvée.

Du coup j'ai mon programme en passant par une autre voie.

Merci pour votre, c'est très util.

Cordialement,
Youness
0