呼唤
List<String> b = new ArrayList<String>(a);
创建的浅表副本
a内
b。所有元素将以
b与它们完全相同的顺序存在
a(假设元素具有顺序)。
同样地,
// note: instantiating with a.size() gives `b` enough capacity to hold everythingList<String> b = new ArrayList<String>(a.size());Collections.copy(b, a);
还创建的浅表副本
a内
b。如果第一个参数的 容量
(大小)
b不足以容纳所有的元素,则它将抛出。期望工作不需要任何分配,如果有分配,那么它将抛出该异常。这是一种优化的方法,要求将复制的集合预先分配(),但由于考虑到基于构造函数的替代方法(如上所示)没有奇怪的副作用,因此需要进行检查,因此我通常认为该功能不值得。
__
a``IndexOutOfBoundsException
Collections.copy
b
要创建深层副本,必须
List通过任一机制对基础类型具有复杂的知识。对于
Strings(它在Java中是不变的)(甚至是.NET),您甚至不需要深层副本。对于
MySpecialObject,您需要知道如何对其进行深拷贝,而这不是一般操作。
注意:最初接受的答案是
Collections.copy在Google中获得最高结果的答案,并且完全没有错,正如评论中指出的那样。



