如何制作ArrayList的单独副本?
我有一个如下的示例程序:
ArrayList<Invoice> orginalInvoice = new ArrayList<Invoice>();//add some items into it here
ArrayList<Invoice> copiedInvoice = new ArrayList<Invoice>();
copiedInvoice.addAll(orginalInvoice);
我以为我可以修改其中的项目,copiedInvoice
而不会影响其中的这些项目originalInoice
。但是我错了。
如何制作的单独副本/克隆ArrayList
?
谢谢
回答:
是的,这是正确的-
您需要实现clone()
(或另一种合适的机制来复制对象,这clone()
被许多程序员认为“破坏了”)。您的clone()
方法应该对对象内所有可变字段进行深层复制。这样,对克隆对象的修改将不会影响原始对象。
在示例代码中,您正在创建第二个代码,ArrayList
并使用
填充它,这就是为什么从两个对象都可以看到对对象的更改的原因List
。使用克隆方法,您的代码将如下所示:
List<Foo> originalList = ...;// Create new List with same capacity as original (for efficiency).
List<Foo> copy = new ArrayList<Foo>(originalList.size());
for (Foo foo: originalList) {
copy.add((Foo)foo.clone());
}
:为澄清起见,以上代码正在执行原始对象的
,List
其中新代码List
包含对原始对象副本的引用。这与调用相比ArrayList.clone()
,后者执行shallow
copy的List
。在这种情况下,浅表副本会创建一个新List
实例,但其中包含对原始对象的引用。
以上是 如何制作ArrayList的单独副本? 的全部内容, 来源链接: utcz.com/qa/401972.html