在 java 中使用 ArrayList 时的深拷贝

Deep copy when Using ArrayList in java

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

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

那么数组的元素是被复制还是仍然指向旧值? 谢谢

这取决于您的用例。有时需要公开底层集合,有时则不然。

例如,如果您想要利用 class 的集合方法,您可以 return 基础集合(或基础集合的可修改视图)。这使您 class 的客户能够做到,例如

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

如果您不想公开底层集合,我会选择

return new ArrayList<>(yourCollection);

我认为 非常 return get 方法中的深层复制。