Comment puis-je copier le contenu d'une liste de tableaux dans un autre?
J'ai quelques structures de données, et je voudrais l'utiliser comme temporaire, et une autre de ne pas temporaire.
ArrayList<Object> myObject = new ArrayList<Object>();
ArrayList<Object> myTempObject = new ArrayList<Object>();
//fill myTempObject here
....
//make myObject contain the same values as myTempObject
myObject = myTempObject;
//free up memory by clearing myTempObject
myTempObject.clear();
maintenant, le problème avec cette approche est que myObject
est vraiment juste pointant vers myTempObject
, et donc, une fois que myTempObject
est effacé, donc est myObject
.
Comment puis-je conserver les valeurs de myTempObject
dans myObject
à l'aide de java?
- Vous pouvez utiliser
List.addAll
. Mais si vous avez besoin de conserver tous les objets puis en désactivant la temp liste n'est pas vraiment clair tout un tas de mémoire. Parce que vous êtes seulement en essayant d'effacer les références, autant que les objets que vous essayez de les garder. - Comme je sais que cette réponse est toujours valide: stackoverflow.com/questions/715650/...
- Il est difficile d'interpréter ce que vous êtes vraiment essayer de l'atteindre. Vous devez expliquer votre situation.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une telle astuce:
ou de l'utilisation
Vous pouvez obtenir des informations sur la méthode clone () ici
Mais vous devriez vous rappeler, que toutes ces façons de vous donner une copie de votre Liste, pas tous de ses éléments. Donc, si vous modifiez l'un des éléments de votre Liste copiée, il va également être modifié dans votre Liste d'origine.
Object
il va toujours de l'assignation par référence. Par la voieclone()
est un peu de la copie et de ne pas copier le contenu de l'Objects
mais plutôt des références. Si vous voulez faire une copie en profondeur regardez: stackoverflow.com/questions/64036/...oldList = newList
?originalArrayList.addAll(copyArrayList);
Veuillez Noter: Lors de l'utilisation de la addAll() méthode pour copier le contenu des deux le tableau des listes (originalArrayList et copyArrayList) voir les mêmes objets ou de son contenu. Donc, si vous modifiez l'un de l'autre reflètent aussi le même changement.
Si vous n'avez pas de wan-ce pas, alors vous devez copier chaque élément de la originalArrayList à la copyArrayList, comme à l'aide d'une ou while.
Il n'y a pas implicite des copies en java via l'opérateur d'affectation. Variables contiennent une valeur de référence (pointeur) et lorsque vous utilisez
=
vous êtes seulement faire face à cette valeur.Afin de préserver le contenu de
myTempObject
vous auriez besoin de faire une copie de celui-ci.Cela peut être fait par la création d'un nouveau
ArrayList
en utilisant le constructeur qui prend un autreArrayList
:Edit: Comme Bohème points dans les commentaires ci-dessous, est-ce que vous demandez? En procédant comme ci-dessus, les deux
ArrayList
s (myTempObject
etmyObject
) permettrait de contenir des références à la même objets. Si vous voulez vraiment une nouvelle liste qui contient de nouvelles copies des objets contenus dansmyTempObject
ensuite, vous devez faire une copie de chaque objet dans l'originalArrayList
clear()
sur leArrayList
myTempObject
aurait aucun effet sur les objets contenus therin. S'il voulait de nouvelles copies des objets contenus dans la liste, c'est une autre histoire, mais ce n'est pas ce que j'ai interprété ce qu'on leur demande.Est venu à travers ce tout en faisant face à la même question de moi-même.
Disant arraylist1 = arraylist2 définit les deux au point à la même place, donc si vous modifiez les données et modifie donc les deux listes restent toujours les mêmes.
De copier les valeurs dans une liste indépendante que je viens d'utiliser foreach pour copier le contenu:
remplir list1 quelle que soit la façon dont vous êtes actuellement.
Supopose que vous souhaitez copier oldList dans une nouvelle liste de tableaux objet appelé newList
Ces deux listes sont indepedant, des modifications à l'un ne sont pas reflétés à l'autre.
Permet d'essayer l'exemple
Impression sortie comme ci-dessous
Un
Deux
Trois
Quatre
Cinq
Six
Nous pouvons aussi le faire en utilisant clone() méthode qui est utilisée pour créer la copie exacte
pour l'essayer, vous pouvez essayer aussi, comme
Vous devez
clone()
de l'objet individuel.Constructor
et d'autres méthodes d'effectuer la copie superficielle. Vous pouvez essayer de Les Collections.copie méthode.Collections.copy
est cassé. Tout d'abord, il induit en erreur en disant qu'il copie les éléments, alors qu'elle ne les références dans une nouvelle liste. Deuxièmement, vous devez déjà avoir une liste de destination de la taille pas moins que la source de la liste...Moyen simple de faire des copie de l'original de la liste pour ajouter tous les éléments d'une liste à une autre liste.
Maintenant, Si vous apportez des modifications à originalList il n'aura pas d'impact duplicateList.
copier les données d'une liste dans une autre liste, u peut utiliser la méthode appelée
Collection.copier(myObject myTempObject).maintenant, après l'exécution de ces ligne de code u peut voir de toutes les valeurs de la liste dans la myObject.
Voici une solution de contournement pour copier tous les objets à partir d'une liste de tableaux à l'autre:
sous-liste est conçue pour renvoyer une Liste avec une plage de données. de sorte que vous pouvez copier l'ensemble de la liste de tableaux ou en partie.