首页 文章

从本地构建的可变映射返回不可变映射的首选方法是什么?

提问于
浏览
3

通常,我发现自己实现了从输入源构建 Map 的方法 . 在这种情况下,我使用 scala.collection.mutable.Map ,假设速度和效率更高;然而,一旦这个集合被构建,我不再希望它是可变的 .

从可变映射返回不可变映射的首选Scala方法是什么?通常,我做了 myMap.toMap ,这显然有效,但闻起来 . 或者,您可以将返回类型设置为 scala.collection.Map ,这不需要构建新集合,但似乎可能会使读者感到困惑 .

谢谢你的回复 .

3 回答

  • 0

    最好的方法是拨打 .toMap . 它简短,干净,并且明确表示您希望将您的收藏转换为 immutable.Map .

    我认为将类型设置为 scala.collection.Map 确实会让人感到困惑 . 它也不会保护您免受某人设置类型的影响 . 使类型 immutable.Map 清晰且安全 .

  • 5

    我不确定你为什么认为 .toMap 闻起来,但如果你想要明确 collection.immutable.Map() ++ myMap 应该清楚地记录发生了什么 . (别忘了 () ;它们不是可选的 . )

    简单地改变返回类型并不能完全解决不变性问题;变异方法不再可见,但用户可以轻松地退回 . 然而,这是最高性能的方法,因为没有什么是真正改变的 .

  • 7
    import scala.collection._
    import scala.collection.JavaConversions._
    
    val myMap: mutable.Map[K,V] = ???
    val unmodifiable: mutable.Map[K,V] =
      java.util.Collections.unmodifiableMap[K,V](myMap)
    val newMap = unmodifiable.asInstanceOf[scala.collection.Map[K,V]]
    

    您可以将 newMap 转换为 mutable.Map ,但修改将抛出 UnsupportedOperationException .

    就我而言, Map 可能足够小,以至于可能更快并且使用更少的内存 .

相关问题