在java中使用ArrayList时的深层复制

时间:2015-02-21 12:55:51

标签: java arraylist collections copy deep-copy

我知道这是一件小事,但我想问这个问题。假设我有一个返回对象ArrayList的get方法。首先,我们必须返回它的副本吗?如果是这样,它是否必须是ArrayList的深层副本?当内部的对象是不可变的时,我们还需要做一个深层复制吗? 如果我们使用这种类型的构造函数

ArrayList<T> arr = new ArrayList<>(collection);

然后是复制的数组元素还是仍指向旧值? 感谢

1 个答案:

答案 0 :(得分:5)

这取决于您的使用案例。有时候暴露底层集合是可取的,有时它不是。

如果你想要利用你的类的集合方法,你可以返回底层集合(或底层集合的可修改视图)。这使您的类的客户端可以执行,例如

phoneBook.getPeople().removeIf(Person::isAddressInvalid);

如果您不想希望公开基础集合,我会选择

return new ArrayList<>(yourCollection);

我认为在get方法中返回深层副本很少非常