【发布时间】:2011-12-04 12:35:05
【问题描述】:
来自Java 1.6 Collection Framework documentation:
不支持任何修改操作的集合(例如
add、remove和clear)被称为不可修改。 [...] 额外保证 Collection 对象中没有任何变化的集合被称为不可变。
第二个标准让我有点困惑。鉴于第一个集合是不可修改的,并且假设原始集合引用已被丢弃,那么第二行中提到的更改是什么?它是指集合中元素的变化,即元素的状态吗?
第二个问题:
对于不可变的集合,如何提供指定的额外保证?如果集合中元素的状态由线程更新,那么状态中的这些更新在持有不可变集合的线程上不可见就足以实现不变性吗?
要使集合不可变,如何提供指定的额外保证?
【问题讨论】:
-
一般来说(特别是在函数式语言中),不可变(又名持久)集合可能会在某种意义上发生变化,您可以获得该集合的新状态,但同时旧状态仍可从其他链接获得。例如,
newCol = oldCol.add("element")将生成新集合,它是旧集合的副本,多了 1 个元素,并且对oldCol的所有引用仍将指向相同的未更改的旧集合。
标签: java collections immutability