以下两个片段中哪个更有效且行为正确?
// snippet 1
var map = Map[String, Int]() // immutable map with var
map.synchronized(map += "hello" -> 1)
map.synchronized(map -= "hello")
// snippet 2
val mmap = scala.collection.mutable.Map[String, Int]()
mmap.synchronized(mmap += "hello" -> 1)
mmap.synchronized(mmap -= "hello")
编辑:我正在寻找并发访问 map 的情况,其中多个不同的参与者共享同一张 map 并想要修改它。链接的问题还涉及
var
的一般情况和 val
, 而我需要一些关于 Map
的见解收藏类型。
最佳答案
这取决于可变和不可变对象(immutable对象)都有其优点和缺点。
不可变对象(immutable对象)使并发编程更容易、更安全,并且您可以轻松地对它们进行推理。大多数发生在 JVM 并发周围的运行时错误是由于共享可变状态。
如果你的对象变大了,仅仅为了保持不可变状态而复制对象是没有意义的。在设计算法时,您必须明智地思考。
关于scala - 带有 var 的不可变映射或带有 val 的可变映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48201204/