如何将一个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 ,所以一旦清除了myTempObjectmyObject

如何使用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); 

编辑:正如波希米亚在下面的评论中指出的,这是你问的? 通过这样做,这两个ArrayListmyTempObjectmyObject )将包含对同一对象的引用。 如果你真的想要一个包含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);