ArrayList浅拷贝迭代或克隆()

时间:2010-04-07 13:54:10

标签: java

我需要一个java ArrayList的浅表副本,我应该使用clone()还是迭代原始列表并将元素复制到新的arrayList中,哪个更快?

4 个答案:

答案 0 :(得分:43)

无需迭代:

List original = ...
List shallowCopy = new ArrayList(original);

http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29

答案 1 :(得分:10)

使用clone(),或使用复制构造函数。

复制构造函数从传递的集合到数组进行额外的转换,而clone()方法直接使用内部数组。

请注意,clone()会返回Object,因此您必须转发List

答案 2 :(得分:8)

您可以使用copy constructor

,而不是手动迭代

至于使用clone()之间的速度差异:

  1. 没关系
  2. 很可能没有
  3. 为您的特定系统配置和用例做基准测试

答案 3 :(得分:-2)

问题是浅层扫描不是深度复制。直接从一个arraylist引用到另一个的引用也可以正常工作。深层复制包括复制arraylist中的单个元素。

ArrayList<Integer> list=new ArrayList<Integer>();
list.add(3);
ArrayList<Integer> list1=list; //shallow copy...

这有什么问题吗?