首页 > 解决方案 > 有什么方法可以加快 Map.getOrElse(val, 0) 在大元组地图上的工作?

问题描述

Map我在 Scala 中有简单的不可变:

// ... - mean and so on
val myLibrary = Map("qwe" -> 1.2, "qasd" -> -0.59, ...)

为此,myMap我调用了调用MyFind方法getOrElse(val, 0)

def MyFind (srcMap: Map[String,Int], str: String): Int ={
    srcMap.getOrElse(str,0)
}

val res = MyFind(myLibrary, "qwe")

问题在于该方法为不同的输入字符串调用了多次。例如,我认为对于地图长度 100 和 1 个输入字符串,它将尝试比较该字符串 100 次(1 个地图值的比较)。正如您猜测的 10,000 次,它将获得 10,000 次比较。

由于映射长度超过 10.000,我的方法在该映射中查找字符串键的值会显着减慢工作速度。

您有什么建议可以加快该代码的速度?

也许使用另一种类型的地图?

也许另一个系列?

标签: scalafindseq

解决方案


Map没有线性时间查找。默认的具体实现MapHashMap

Map是不可变映射的接口,同时scala.collection.immutable.HashMap是一个具体的实现。

根据集合性能特征,它具有有效的恒定查找时间

                lookup  add  remove  min

HashSet/HashMap  eC     eC    eC     L

推荐阅读