如何将一个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
。
如何使用java在myObject
保留myTempObject
的值?
你可以使用这样的技巧:
myObject = new ArrayList<Object>(myTempObject);
或使用
myObject = (ArrayList<Object>)myTempObject.clone();
你可以在这里获得关于clone()方法的一些信息
但是你应该记住,所有这些方法都会给你一个你的List的副本,而不是所有的元素。 因此,如果您更改复制列表中的其中一个元素,它也将在您的原始列表中更改。
originalArrayList。 addAll (copyArrayList);
请注意 :使用addAll()方法进行复制时,数组列表(originalArrayList和copyArrayList)的内容引用相同的对象或内容。 所以如果你修改其中的一个,另一个也会反映出同样的变化。
如果你不想这样做,那么你需要将originalArrayList中的每个元素复制到copyArrayList中,就像使用for或while循环一样。
通过赋值操作符在java中没有隐式拷贝。 variables包含一个引用值(指针),当你使用=
你只是应付这个值。
为了保存myTempObject
的内容,您需要复制它。
这可以通过使用另一个ArrayList
的构造函数创build一个新的ArrayList
来完成:
ArrayList<Object> myObject = new ArrayList<Object>(myTempObject);
编辑:正如波希米亚在下面的评论中指出的,这是你问的? 通过这样做,这两个ArrayList
( 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
和其他方法执行浅拷贝。 你可以尝试Collections.copy方法。
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()); }**
要将一个列表复制到另一个列表中,您可以使用名为Collection.copy(myObject myTempObject)的方法。在执行完这些代码之后,您可以看到myObject中的所有列表值。
将一个列表复制到第二个非常简单,你可以这样做:
ArrayList<List1> list1= new ArrayList<>(); ArrayList<List1> list2= new ArrayList<>(); //this will your copy your list1 into list2 list2.addAll(list1);