J'essaie de créer une ArrayList of ArrayLists. Je veux créer 25 ArrayLists et que ceux-ci aient des valeurs différentes. L'objectif étant de créer un dictionnaire trié par longueur de mot.
Mon code ressemble à
for(int i = 0; i < 25; i++)
list2D.add(list);
for(int i = 0; i < stringList; i++)
list2D.get(stringList.get(i).length()).add(stringList.get(i))
Le problème est que chaque liste contient les mêmes valeurs une fois celle-ci terminée.
Je sais pourquoi le problème se passe. "list" est une ArrayList, les ArrayList sont des objets et si vous éditez un objet, tout ce qui contient cet objet sera édité.
Pour résoudre le problème, j'ai essayé
for(int i = 0; i < 25; i++){
list = new ArrayList<String>();
for(int i2 = 0; i2 < stringList.size(); i2++){
if(stringList.get(i).length() == i)
list.add(stringList.get(i2));
}
list2D.add(list);
}
Mais quand je teste mon "list2D"
for(int i = 0; i < 25; i++)
System.out.print(list2D.get(i).size()+" ");
Je reçois
0 0 0 0 0 58110 0 58110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
et je ne sais pas pourquoi ...
De plus, il peut être pertinent de noter que stringList contient 58110 valeurs.
Aussi, je ne veux pas avoir à faire 25 ArrayLists différents!
Merci. J'ai trouvé une solution très facile cependant ...
for(int i = 0; i < 25; i++)
list2D.add(new ArrayList<String>());
for(int i = 0; i < Word.size(); i++)
list2D.get(stringList.get(i).length()).add(stringList.get(i));
Je voudrais essayer ce qui suit pour faire un seul passage de la stringList
List<List<String>> dict = new ArrayList<>();
for(string s: stringsList) {
int len = s.length();
// add new array lists as required, could be any length, assuming << 100
while(dict.size() <= len) dict.add(new ArrayList<String>());
// add the string to the right list.
dict.get(len).add(s);
}
C'est facile. Par exemple, vous pouvez les créer comme ceci: http://ideone.com/3NZwWU
// just for convenience, initializes arraylist with values
static <T> ArrayList<T> AL(T... values) {
ArrayList<T> r = new ArrayList<T>();
for (T x : values) {
r.add(x);
}
return r;
}
public static void main (String[] args) throws Java.lang.Exception
{
System.out.println(AL(
AL(3,2,24,131),
AL("this", "is", "second", "array")));
// prints `[[3, 2, 24, 131], [this, is, second, array]]`
}
// fabrique un artiste avec 19 éléments
ArrayList<ArrayList> arrList = new ArrayList<ArrayList>();
for(int i = 1; i < 20; i++){
arrList.add(new ArrayList<Integer>(5*i+5));
}