Ryo*_*Oka 3 scala mutable map immutability
我想将一个可变映射转换为封闭范围内的不可变映射.以下是情况和无意义防御副本的示例代码:
def func(): immutable.Map[String, Int] = {
val map = mutable.HashMap[String, Int]
// here goes operations for the map
return immutable.HashMap ++ map
}
Run Code Online (Sandbox Code Playgroud)
当我写"无意义"时,在这里做防御性复制完全是浪费,因为可变地图实际上是从外部不可变的.如果我们只能从外部看到getter操作,那么性能应该更好.
问题是我真的不知道该怎么做.我试过用匿名的不可变映射实例简单地包装它,但是这个方法def +[B1 >: B](kv: (A, B1))使它变得不可能.
请帮我!
编辑:刚才忘了修复返回类型[Int, Int]来[String, Int]
你可以简单地返回collection.Map,这是一个常见的超类型collection.mutable.Map和collection.immutable.Map:
def func(): collection.Map[Int, Int] = {
val map = mutable.HashMap[String, Int]
// here goes operations for the map
return map
}
Run Code Online (Sandbox Code Playgroud)
用户可以将其转换为mutable.Map,但他们也可以通过任何解决方案中的反射来获取可变映射,这避免了复制,或者即使在复制时也会改变不可变映射.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |