当我们可以在地图或列表中添加或删除元素时,它们如何不可变?

Abh*_*mar 1 scala immutable-collections

以下是声明不可变Map的Scala代码

var m:Map[Int,String] = Map(1->"hi",2->"hello")
println(m)
// Result: Map(1->"hi",2->"hello")
Run Code Online (Sandbox Code Playgroud)

在这里,我们能够添加或更改Map的内容,那么我们如何说scala中的map或list是不可变的

m=m+(3->"hey") 
println(m)
// Result: Map(1->"hi",2->"hello",3->"hey")**
Run Code Online (Sandbox Code Playgroud)

Gal*_*aor 8

Map是不可变的,但是您使用了一个mutable变量m(因为您将其声明为var)。

该行m=m+(3->"hey")实际上创建了一个新映射并将其分配给您的变量m

尝试声明m为as,val然后将看到编译错误。

但是-如果您将使用可变映射:

val m = scala.collection.mutable.Map[Int,String]
Run Code Online (Sandbox Code Playgroud)

您将能够更新此地图(尽管您不能使用不可变的地图来做到这一点)-

m(3) = "hey"
Run Code Online (Sandbox Code Playgroud)

要么

m.put(3,"hey")
Run Code Online (Sandbox Code Playgroud)

这样就可以更新地图的内容,而无需重新创建它或更改变量m(就像您之前对进行的操作一样m = m + ...),因为这里m被声明为val,这使其不可变,但是地图是可变的。

m = m + ..声明为时,您仍然无法执行操作val

请参阅此回答有关之间的差异varval