如何将List <integer>的值而不是引用复制到另一个列表中?</integer>

时间:2012-05-03 07:40:22

标签: java arraylist

即,在不引用同一对象的情况下,我需要将一个列表的元素值复制到另一个列表中。这些是列表:

List<Integer> listA = new ArrayList<Integer>();
List<Integer> ListB = new ArrayList<Integer>();

listA = (added some values);

listB = (do what?)...

PS。我为初学者的问题道歉,但我从未做过这样的事情。

7 个答案:

答案 0 :(得分:19)

绝对没有理由复制整数。整数是一个不可变的类。这意味着它的值在创建Integer实例时设置,并且永远不会更改。因此,可以毫无顾虑地由多个列表和线程共享整数引用,因为任何人都无法更改其值。因此,你的问题没有任何意义。

要创建一个包含与另一个列表b相同的整数的ArrayList a,只需使用以下代码:

List<Integer> b = new ArrayList<Integer>(a);

确定整数不会被克隆,但这是一件好事,因为克隆它们是完全没必要的。

答案 1 :(得分:16)

您可以尝试查看Collections.copy方法:

  

public static void copy(List dest,               列出src)

     

将一个列表中的所有元素复制到另一个列表中。操作完成后,每个复制的索引   目标列表中的元素将与其中的索引相同   来源清单。目的地列表必须至少与   来源清单。如果它更长,则剩余的元素在   目的地列表不受影响。此方法以线性时间运行。

     

参数:dest - 目的地列表。 src - 源列表。

注意:上述内容适用于简单数据类型,例如整数,但是,如果您有自己的对象,而这些对象可能会引用其他对象,则必须迭代每个对象并单独复制。

答案 2 :(得分:4)

使用Collections类的method将ArrayList的所有元素复制到另一个ArrayList:

Collections.copy(listA, listB); 

答案 3 :(得分:2)

尝试使用它,而其他人给出的答案完全没问题。但根据我的选择,以下是最好的方法:

List<Integer> listB = new ArrayList<Integer>(listA); 

答案 4 :(得分:0)

对于clone()和Cloneable,你不会有太多运气 - 它只会创建一个浅拷贝。你可以使用这样的东西 - http://javatechniques.com/blog/faster-deep-copies-of-java-objects/

答案 5 :(得分:0)

List<XObject> lista = new ArrayList();
List<XObject> listb = new ArrayList();

//copy no reference
lista.adAll(new ArrayList<>(listb));

此代码块对我有用!

答案 6 :(得分:-3)

试试这个。

ListB.addAll(listA);