Scala集合中的可变与不可变

时间:2011-11-27 17:22:03

标签: scala collections containers scala-collections

我是Scala的新手,我正在尝试理解集合层次结构。我看到“可变”和“不可变”集合之间存在区别,但我不明白这在实现级别实际意味着什么以及它与valvar的关系。有人能给我一些见解吗?此外,每个集合类都有“可变”版本和“不可变”版本,还是有些类只能是“可变”或“不可变”?

2 个答案:

答案 0 :(得分:60)

Mutable意味着您可以就地更改集合。因此,如果您有一个集合c并且附加了+=的元素,那么c已经更改,因此对该集合的所有其他引用也是如此。

不可变意味着集合对象永远不会改变;相反,您使用+++等操作构建新的集合对象,返回新集合。这在并发算法中很有用,因为它不需要锁定来向集合添加内容。它可能以一些开销为代价,但这个属性非常有用。 Scala的不可变集合是fully persistent data structures

差异与varval之间的差异非常相似,但请注意:

  1. 您可以修改绑定到val就地的可变集合,但无法重新分配val
  2. 您无法就地修改不可变集合,但如果将其分配给var,则可以通过{{1}之类的操作将var重新分配给由其构建的集合。 }}。
  3. 并非所有集合都必然存在于可变和不可变的变体中;我最后一次检查时,只支持可变优先级队列。

答案 1 :(得分:7)

不可改变意味着不可改变。 val使引用不可更改,这意味着一旦初始化,您就无法为val赋值。不可变集合使集合本身不可更改而不是对它的引用。每次修改不可变集合时,都会生成另一个集合,而不是就地修改原始集合。大多数集合都有不可变版本和可变版本,但当然也有例外。