Copie en profondeur d'un ArrayList<Arraylist> en JAVA
J'ai vérifié d'autres réponses, mais je ne pouvais pas trouver une réponse à ma question.
Je veux créer une copie de mon ArrayList<ArrayList>
, car j'ai besoin de l'original quelque part d'autre. J'ai utilisé le .clone()
méthode de différentes façons:
public class WordChecker {
private ArrayList<ArrayList> copyOfList = new ArrayList<ArrayList>();
public WordChecker(ArrayList<ArrayList> list) {
for (int i = 0; i < list.size(); i++)
for (int j = 0; j < 7; j++)
copyOfList = (ArrayList<ArrayList>) list.clone(); //without error
//copyOfList = list.clone();cannot convert from Object to
//ArrayList<ArrayList>
//copyOfList = list.get(i).clone();cannot convert from Object to
//ArrayList<ArrayList>
//copyOfList = list.get(i).get(j).clone();
}
mais toujours mon principal ArrayList
des modifications car je travail sur sa copie.
Quelqu'un pourrait-il me dire comment je dois obtenir une copie en profondeur dans ce cas?
Réponse:
J'ai mis le mécanisme de recopie dans mon constructeur de la classe:
private ArrayList<List> checkedTags = new ArrayList<List>();
public WordChecker(ArrayList<ArrayList> list)
{
for (ArrayList word: list) copyOfList.add((ArrayList) word.clone());
}
le seul problème, c'est que ce n'est pas applicable à copier à partir de ArrayList qui m'a fait passer par une boucle for utiliser .méthode get ().Je pense qu'ils sont fondamentalement les mêmes à la fin.
- N'utilisez pas de clone(). Utiliser la liste de tableaux constructeur qui prend une autre collection, comme argument. Et vous aurez besoin de boucle si vous voulez une copie en profondeur.
- Jetez un oeil ici: stackoverflow.com/questions/715650/...
- J'ai fait une boucle imbriquée à atteindre pour chaque élément à l'intérieur de l'ArrayList. il envoyait le message d'erreur mentionné dans la front de de le code. J'ai utilisé ce code: >> for (liste de tableaux word: la liste) copyOfList.ajouter(mot.clone())... trop. mais il ne peut l'accepter .ajouter .
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
ArrayList(Collection c)
constructeurAttention:
Comme mentionné par @Tim B ce n'est pas la copie en profondeur les éléments à l'intérieur ArrayList