繁体   English   中英

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

[英]Deep copy when Using ArrayList in java

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

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

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

这取决于您的使用案例。 有时需要暴露底层集合,有时则不然。

例如,如果您想要利用类的集合方法,则可以返回基础集合(或底层集合的可修改视图)。 例如,这使您的班级客户能够这样做

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

如果你希望暴露底层集合我会去

return new ArrayList<>(yourCollection);

我认为在get方法中返回深层副本非常罕见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM