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)
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。
请参阅此回答有关之间的差异var和val。