24

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

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

listA = (added some values);

listB = (do what?)...

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

4

6 回答 6

32

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

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

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

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

于 2012-05-03T11:42:48.737 回答
21

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

公共静态无效副本(列表目标,列表源)

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

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

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

于 2012-05-03T07:50:36.460 回答
6

使用该类的方法CollectionsArrayList 的所有元素复制到另一个 ArrayList:

Collections.copy(listA, listB); 
于 2012-05-03T07:47:42.963 回答
2

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

List<Integer> listB = new ArrayList<Integer>(listA); 
于 2012-05-03T08:13:28.083 回答
-1

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

于 2012-05-03T07:47:20.400 回答
-4

尝试这个。

ListB.addAll(listA);
于 2012-05-03T07:42:24.317 回答