private List list;
Run Code Online (Sandbox Code Playgroud)
如果我们使用Collections.unmodifiableCollection(list),它会返回该集合的副本,还是比创建副本更快?我们可以做,other.addAll(list)但我们有600,000个对象的列表,所以addAll不太好.
调用者只需要一个只读集合.
Col*_*inD 11
Collections.unmodifiableList只返回一个不可修改的包装器; 它不会复制输入列表的内容.
它的Javadoc相当清楚地说明了这一点:
返回指定列表的不可修改视图.此方法允许模块为用户提供对内部列表的"只读"访问.对返回列表的查询操作"读取"到指定的列表,并尝试修改返回的列表,无论是直接还是通过其迭代器,都会导致
UnsupportedOperationException.
正如Matt Ball所提到的,如果你不需要内部List是可变的,你可能只想在内部存储一个Guava ImmutableList ......你可以安全地直接将它提供给调用者,因为它永远不会改变.
是否
Collections.unmodifiableCollection(list)复制收藏?
其他答案是正确的(+1四处都是):答案是否定的.
而不是Collections.unmodifiableList()你可以使用Guava ImmutableList.copyOf()来创建一个不可变(不可修改)的列表副本.
Collections.unmodifiableCollection(..)只需包装原始集合,禁用修改方法.它没有复制它.
如果更改原始列表,"不可修改"集合也将更改.但是只有不可修改的集合的客户端无法改变它.