来自Java 1.6 Collection Framework 文档:
不支持任何修改操作(例如
add
,remove
和clear
)的集合称为不可修改的。[...] 额外保证 Collection 对象中的任何更改都不会可见的集合被称为不可变的。
第二个标准让我有点困惑。鉴于第一个集合是不可修改的,并且假设原始集合引用已被处理掉,那么第二行中引用的更改是什么?它是指集合中元素的变化,即元素的状态吗?
第二个问题:
对于不可变的集合,如何提供指定的额外保证?如果集合中元素的状态由线程更新,那么状态中的那些更新在持有不可变集合的线程上不可见是否足以实现不变性?
对于不可变的集合,如何提供指定的额外保证?
不可修改的集合通常是其他集合的只读视图(包装器)。您无法添加、删除或清除它们,但基础集合可以更改。
不可变集合根本不能改变——它们不包装另一个集合——它们有自己的元素。
这是番石榴的引述
ImmutableList
因此,基本上,为了从可变集合中获取不可变集合,您必须将其元素复制到新集合,并禁止所有操作。