Как скопировать содержимое одного 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?
Ответы
Ответ 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.