一尘不染

Java不可变集合

java

Java 1.6 Collection
Framework文档中

不支持任何修改操作(如类别addremoveclear)被称为 不可修改的
。[…]额外保证Collection对象中的任何更改都将不可见的Collection被称为 不可变的

第二个标准使我有些困惑。鉴于第一个集合是不可修改的,并且假定原始集合引用已被删除,那么第二行中提到的更改是什么?它是指集合中包含的元素的变化,即元素的状态吗?

第二个问题:
要使集合不可变,如何提供指定的其他保证人?如果集合中元素的状态由线程更新,那么对于不可变是否足以使状态中的那些更新在保存不可变集合的线程上不可见?

对于一个不可变的集合,如何提供指定的附加保证?


阅读 324

收藏
2020-09-08

共1个答案

一尘不染

不可修改的集合通常是其他集合的只读视图(包装器)。您不能添加,删除或清除它们,但是基础集合可以更改。

不可变集合完全不能更改-它们不包装另一个集合-它们具有自己的元素。

这是番石榴的报价
ImmutableList

Collections.unmodifiableList(java.util.List<? extends T>),它是仍然可以更改的单独集合的视图不同,的实例ImmutableList包含其自己的私有数据,并且永远不会更改。

因此,基本上,为了从可变的集合中获取不可变的集合,您必须将其元素复制到新集合中,并禁止所有操作。

2020-09-08