从Java 1.6 Collection Framework文档中:
不支持任何修改操作(如类别
add
,remove
和clear
)被称为不可修改的。[...]额外保证Collection对象中的任何更改都将不可见的collection被称为不可变的。
第二个标准使我有些困惑。鉴于第一个集合是不可修改的,并且假定原始集合引用已被删除,那么第二行中提到的更改是什么?它是指集合中包含的元素的变化,即元素的状态吗?
第二个问题:
要使集合不可变,该如何提供指定的其他保证人?如果集合中元素的状态由线程更新,那么对于不可变是否足以使状态中的那些更新在保存不可变集合的线程上不可见?
为了使集合不可变,如何提供指定的附加保证?
newCol = oldCol.add("element")
将产生新的集合,该集合是具有1个以上元素的旧集合的副本,并且所有对的引用oldCol
仍将指向相同的未更改的旧集合。