简单地说,我有一个带有ArrayList参数的方法。在该方法中,我修改了ArrayList的内容,以便仅与该方法返回的内容相关。因此,我不希望作为参数传递的ArrayList受到任何影响(即不作为引用传递)。
我试过的所有东西都没能达到预期的效果。我需要做些什么才能只在方法中使用ArrayList的副本,而不让它更改实际的变量?
发布于 2013-04-03 12:07:00
即使您有办法将数组列表作为副本传递,而不是通过引用传递,它也只是一个浅层副本。
我会这样做:
void foo(final ArrayList list) {
ArrayList listCopy = new ArrayList(list);
// Rest of the code
}
只需处理复制的列表即可。
发布于 2013-04-03 12:09:50
您可以使用ArrayList的复制构造函数创建ArrayList的副本:
ArrayList copy = new ArrayList(original);
但是,如果列表的元素也是对象,那么您必须意识到,修改副本的成员也会修改原始的成员。
发布于 2013-04-03 12:06:31
您可以使用.clone
方法或CopyOnWriteArrayList
来制作副本,从而不会影响原始文件。
https://stackoverflow.com/questions/15778645
复制相似问题