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

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

List listA = new ArrayList(); List ListB = new ArrayList(); listA = (added some values); listB = (do what?)... 

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

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

public static void copy(List dest,List src)

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

参数:dest – 目标列表。 src – 源列表。

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

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

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

 List b = new ArrayList(a); 

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

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

 Collections.copy(listA, listB); 

尝试使用这个,而另一个人给出的答案是完全正常的。 但根据我的选择,以下是最好的方法:

 List listB = new ArrayList(listA); 

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

尝试这个。

 ListB.addAll(listA);