Collections.unmodifiableCollection(list)是否复制了集合?

时间:2011-07-29 18:40:57

标签: java collections

private List list;

如果我们使用Collections.unmodifiableCollection(list),这会返回集合的副本,还是比创建副本更快?我们可以other.addAll(list)但我们有600,000个对象的列表,所以addAll不太好。

来电者只需要一个只读集合。

3 个答案:

答案 0 :(得分:11)

Collections.unmodifiableList只返回一个不可修改的包装器;它不会复制输入列表的内容。

Javadoc相当清楚地说明了这一点:

  

返回指定列表的不可修改视图。此方法允许模块为用户提供对内部列表的“只读”访问。对返回列表的查询操作“通读”到指定列表,并尝试修改返回的列表,无论是直接还是通过其迭代器,都会产生UnsupportedOperationException

正如Matt Ball所提到的,如果您不需要内部List可变,您可能只想在内部存储Guava ImmutableList ...您可以放心地给出直接给呼叫者,因为它永远不会改变。

答案 1 :(得分:8)

  

Collections.unmodifiableCollection(list)是否会复制该集合?

其他答案都是正确的(+1四处都是):答案是否。


您可以使用Guava's ImmutableList.copyOf()来创建不可变(不可修改)的列表副本,而不是Collections.unmodifiableList()

答案 2 :(得分:7)

Collections.unmodifiableCollection(..)只包装原始集合,禁用修改方法。它没有复制它。

如果更改原始列表,“不可修改”集合也将更改。但是只有不可修改的集合的客户端无法改变它。