Как скопировать содержимое одного 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?
10 ответов:
Вы можете использовать такой трюк:
myObject = new ArrayList<Object>(myTempObject);или использовать
myObject = (ArrayList<Object>)myTempObject.clone();Вы можете получить некоторую информацию о методе clone ()здесь
но вы должны помнить, что все эти способы дадут вам копию список, не все его элементы. Поэтому, если вы измените один из элементов в скопированном списке, он также будет изменен в исходном списке.
originalArrayList. addAll(copyArrayList);
Обратите Внимание: при использовании метода addAll() для копирования содержимое обоих списков массивов (originalArrayList и copyArrayList) ссылается на одни и те же объекты или содержимое. Поэтому, если вы измените любой из них, другой также отразит то же самое изменение.
Если вы не хотите этого, вам нужно скопировать каждый элемент из originalArrayList в copyArrayList, например, используя for или while петля.
нет никаких неявных копий, сделанных в java через оператор присваивания. Переменные содержат ссылочное значение (указатель) и при использовании
=вы только справляетесь с этим значением.для того, чтобы сохранить содержание
myTempObjectвам нужно будет сделать его копию.это можно сделать, создав новый
ArrayListС помощью конструктора, который принимает другойArrayList:ArrayList<Object> myObject = new ArrayList<Object>(myTempObject);Edit: как Богема указывает в комментариях ниже, это то, что вы спрашиваете? Делая выше, оба
ArrayLists (myTempObjectиmyObject) будет содержать ссылки на то же самое объекты. Если вы действительно хотите новый список, содержащий новые копии объектов, содержащихся вmyTempObjectтогда вам нужно будет сделать копию каждого отдельного объекта в оригиналеArrayList
наткнулся на это, столкнувшись с той же проблемой сам.
говоря arraylist1 = arraylist2 устанавливает их обоих, чтобы указать на одно и то же место, так что если вы измените либо изменения данных и, таким образом, оба списка всегда остаются одинаковыми.
чтобы скопировать значения в независимый список, я просто использовал foreach для копирования содержимого:
ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList();заполните list1 так, как вы сейчас находитесь.
foreach(<type> obj in list1) { list2.Add(obj); }
Supopose вы хотите скопировать oldList в новый объект ArrayList с именем newList
ArrayList<Object> newList = new ArrayList<>() ; for (int i = 0 ; i<oldList.size();i++){ newList.add(oldList.get(i)) ; }эти два списка являются независимыми, изменения в одном не отражаются на другом.
вам нужно
clone()отдельный объект.Constructorи другие методы выполняют мелкое копирование. Вы можете попробовать сборники.копировать метод.
давайте попробуем пример
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()); }печати выход ниже
один
Два
Три
Четыре
Пять
Шестьмы также можем сделать с помощью clone () метод, который используется для создания точной копии
для этого попробовать вы можете попробовать как
**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()); }**
простой способ сделать глубокую копию списка, чтобы добавить все элементы из одного списка в другой список.
ArrayList<Object> originalList = new ArrayList<Object>(); ArrayList<Object> duplicateList = new ArrayList<Object>(); for(Object o : originalList) { duplicateList.add(o); }теперь, если вы внесете какие-либо изменения в originalList, это не повлияет на duplicateList.
чтобы скопировать один список в другой список, u может использовать метод, называемый Коллекция.копия (myObject myTempObject).теперь после выполнения этих строк кода u может видеть все значения списка в myObject.
копирование одного списка во второй довольно просто , вы можете сделать это, как показано ниже: -
ArrayList<List1> list1= new ArrayList<>(); ArrayList<List1> list2= new ArrayList<>(); //this will your copy your list1 into list2 list2.addAll(list1);
Comments