Подтвердить что ты не робот

Как скопировать содержимое одного ArrayList в другое?

У меня есть некоторые структуры данных, и я хотел бы использовать один из них как временный, а другой как не временный.

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();

теперь проблема с этим, конечно, в том, что myObject действительно просто указывает на myTempObject, и поэтому раз очищается myTempObject, поэтому myObject.

Как сохранить значения из myTempObject в myObject с помощью java?

4b9b3361

Ответ 1

Вы можете использовать такой трюк:

myObject = new ArrayList<Object>(myTempObject);

или используйте

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

Вы можете получить некоторую информацию о методе clone() здесь

Но вы должны помнить, что все эти способы дадут вам копию вашего списка, а не всех его элементов. Поэтому, если вы измените один из элементов в скопированном списке, он также будет изменен в вашем исходном списке.

Ответ 2

originalArrayList addAll (copyArrayList);.

Обратите внимание. При использовании метода addAll() для копирования содержимое обоих списков массивов (originalArrayList и copyArrayList) относится к тем же объектам или содержимым. Поэтому, если вы измените какой-либо из них, другой будет также отражать те же изменения.

Если вы этого не сделаете, вам нужно скопировать каждый элемент из оригиналаArrayList в copyArrayList, например, используя цикл for или while.

Ответ 3

В java нет операторов с помощью оператора присваивания. Переменные содержат ссылочное значение (указатель), и когда вы используете =, вы справляетесь только с этим значением.

Чтобы сохранить содержимое myTempObject, вам нужно будет сделать его копию.

Это можно сделать, создав новый ArrayList с помощью конструктора, который принимает еще один ArrayList:

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

Изменить: Как отмечает Богемиан в комментариях ниже, это то, о чем вы спрашиваете? Выполняя вышеуказанное, оба ArrayList (myTempObject и myObject) будут содержать ссылки на одни и те же объекты. Если вам действительно нужен новый список, содержащий новые копии объектов, содержащихся в myTempObject, тогда вам нужно будет сделать копию каждого отдельного объекта в оригинальной ArrayList

Ответ 4

Пришел к этому, одновременно сталкиваясь с той же проблемой.

Говоря arraylist1 = arraylist2, они обе указывают на одно и то же место, поэтому, если вы изменяете либо данные изменяются, и поэтому оба списка всегда остаются неизменными.

Чтобы скопировать значения в независимый список, я просто использовал foreach для копирования содержимого:

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

заполнить список1 каким бы способом вы ни были.

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

Ответ 5

Предположим, вы хотите скопировать oldList в новый объект ArrayList с именем newList

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

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

Эти два списка являются indepedant, изменения в один не отражаются на другом.

Ответ 6

Вам нужно clone() отдельный объект. Constructor и другие методы выполняют мелкую копию. Вы можете попробовать Collections.copy.

Ответ 7

    Lets try the example
     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());
            }
    In print **output** as below

    One
    Two
    Three
    Four
    Fivexach 
    Six

We can also do by using **clone()** method for which is used to create exact copy
for that try you can try as like
   **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());
            }**

Ответ 8

чтобы скопировать один список в другой список, вы можете использовать метод, называемый Collection.copy(myObject myTempObject). Теперь после выполнения этой строки кода u вы можете увидеть все значения списка в myObject.

Ответ 9

Копирование одного списка во второе довольно просто, вы можете сделать это, как показано ниже: -

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

Ответ 10

Простой способ сделать глубокую копию исходного списка состоит в том, чтобы добавить все элементы из одного списка в другой список.

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

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

Теперь, если вы внесете какие-либо изменения в originalList, это не повлияет на duplicateList.