web-dev-qa-db-fra.com

Comment copier le contenu d'un ArrayList dans un autre?

J'ai quelques structures de données, et j'aimerais en utiliser une à titre temporaire et une autre non 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 ceci est bien sûr que myObject ne pointe en réalité que sur myTempObject, et donc une fois que myTempObject est effacé, il en est de même de myObject.

Comment conserver les valeurs de myTempObject dans myObject en utilisant java?

75
CQM

Vous pouvez utiliser un tel truc:

myObject = new ArrayList<Object>(myTempObject);

ou utiliser

myObject = (ArrayList<Object>)myTempObject.clone();

Vous pouvez obtenir des informations sur la méthode clone () ici

Mais vous devriez vous rappeler que tous ces moyens vous donneront une copie de votre liste , pas tous ses éléments. Ainsi, si vous modifiez l'un des éléments de votre liste copiée, il le sera également dans votre liste d'origine.

122
Artem

originalArrayList .addAll (copyArrayList);

Veuillez noter: Lorsque vous utilisez la méthode addAll () pour copier, le contenu des deux listes de tableaux (originalArrayList et copyArrayList) fait référence aux mêmes objets ou contenus. Donc, si vous modifiez l’un d’eux, l’autre reflétera également le même changement.

Si vous ne le souhaitez pas, vous devez copier chaque élément de l'originalArrayList dans copyArrayList, comme si vous utilisiez une boucle for ou while.

40
Dhananjay M

Aucune copie implicite n'est créée dans Java via l'opérateur d'affectation. Les variables contiennent une valeur de référence (pointeur) et lorsque vous utilisez =, vous ne modifiez que cette valeur.

Afin de préserver le contenu de myTempObject, vous devez en faire une copie.

Cela peut être fait en créant une nouvelle ArrayList en utilisant le constructeur qui prend une autre ArrayList:

ArrayList<Object> myObject = new ArrayList<Object>(myTempObject);

Edit: Comme le souligne Bohemian dans les commentaires ci-dessous, est-ce ce que vous demandez? En procédant de la manière décrite ci-dessus, ArrayLists (myTempObject et myObject) contiendraient des références aux mêmes objets . Si vous souhaitez réellement une nouvelle liste contenant de nouvelles copies des objets contenus dans myTempObject, vous devez créer une copie de chaque objet individuel dans l'original ArrayList.

16
Brian Roach

Je suis tombé sur ce problème tout en faisant face au même problème.

Dire arraylist1 = arraylist2 les place tous les deux pour qu'ils pointent au même endroit. Ainsi, si vous modifiez les données altérées, les deux listes restent toujours identiques.

Pour copier des valeurs dans une liste indépendante, je viens d'utiliser foreach pour copier le contenu:

ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();

remplissez liste1 de la manière que vous êtes actuellement.

foreach(<type> obj in list1)
{
    list2.Add(obj);
}
8
PaulC

Supopose vous voulez copier oldList dans un nouvel objet ArrayList appelé newList

ArrayList<Object> newList = new ArrayList<>() ;

for (int i = 0 ; i<oldList.size();i++){
    newList.add(oldList.get(i)) ;
}

Ces deux listes sont indépendantes, les modifications apportées à l’une ne sont pas répercutées sur l’autre.

4
Java Main

Essayons l'exemple

     ArrayList<String> firstArrayList = new ArrayList<>();
            firstArrayList.add("One");
            firstArrayList.add("Two");
            firstArrayList.add("Three");
            firstArrayList.add("Four");
            firstArrayList.add("Five");
            firstArrayList.add("Six");
            //copy array list content into another array list
             ArrayList<String> secondArrayList=new ArrayList<>();
            secondArrayList.addAll(firstArrayList);
            //print all the content of array list
            Iterator itr = secondArrayList.iterator();
            while (itr.hasNext()) {
                System.out.println(itr.next());
            }

En impression sortie comme ci-dessous

Un
Deux
Trois
Quatre
Cinq
Six

Nous pouvons également le faire en utilisant la méthode clone () qui est utilisée pour créer une copie exacte.

pour cela essayez vous pouvez essayer comme

 **ArrayList<String>secondArrayList = (ArrayList<String>) firstArrayList.clone();**
    And then print by using iterator
      **Iterator itr = secondArrayList.iterator();
                while (itr.hasNext()) {
                    System.out.println(itr.next());
                }**
4
Nilam Rajaput

Vous devez clone() l'objet individuel. Constructor et d'autres méthodes effectuent une copie superficielle. Vous pouvez essayer la méthode Collections.copy .

3
adatapost

Un moyen simple de créer une copie complète de la liste originale consiste à ajouter tous les éléments d’une liste à une autre.

ArrayList<Object> originalList = new ArrayList<Object>();
ArrayList<Object> duplicateList = new ArrayList<Object>();

for(Object o : originalList) {
    duplicateList.add(o);
}

Maintenant, si vous apportez des modifications à originalList, cela n'aura aucun impact sur duplicateList.

1
Chirag Khimani

Supposons que vous avez deux listes de noms de type String. Comme

ArrayList<String> firstArrayList ;//This array list is not having any data.

ArrayList<String> secondArrayList = new ArrayList<>();//Having some data.

Maintenant, nous devons copier les données du second tableau dans le premier répertoire comme ceci,

firstArrayList = new ArrayList<>(secondArrayList );

Terminé!!

0

Voici une solution de contournement pour copier tous les objets d'un tableau dans un autre:

 ArrayList<Object> myObject = new ArrayList<Object>();
ArrayList<Object> myTempObject = new ArrayList<Object>();

myObject.addAll(myTempObject.subList(0, myTempObject.size()));

subList est destiné à renvoyer une liste avec une plage de données. vous pouvez donc copier tout ou partie de la liste de tableaux.

0
Hassanen

pour copier une liste dans une autre liste, vous pouvez utiliser la méthode appelée Collection.copy (myObject myTempObject). À présent, après avoir exécuté cette ligne de code, vous pouvez voir toutes les valeurs de liste dans myObject.

0
Rakhi Jaligama

Copier une liste en une seconde est assez simple, vous pouvez le faire comme suit: -

ArrayList<List1> list1= new ArrayList<>();
ArrayList<List1> list2= new ArrayList<>();
//this will your copy your list1 into list2
list2.addAll(list1);
0
Imran samed