我不明白爲什麼下面的代碼太慢。這段代碼的目標非常簡單:我有一組點,我想分成6個桶(所以每桶100000個點)。代碼:地圖上的列表緩衝簡單循環太慢
import scala.collection.mutable.{Map, ListBuffer}
object Main {
def main(args : Array[String]) = {
val m : Map[String, ListBuffer[Double]] = Map()
val labels = Array("1","2","3","4","5","6")
val points = Array.fill(600000){0.0}
var it = 0
val t1 = System.currentTimeMillis
for (i <- 0 until points.length) {
if(it == labels.length-1) it = 0
val point = points(i)
val currentLabel = labels(it)
val values = m.getOrElse(currentLabel, ListBuffer())
m += (currentLabel -> (values :+ point))
it += 1
println("it -> = " + it)
}
val t2 = System.currentTimeMillis
println("fill values in = " + (t2-t1) + " msecs")
}
}
訪問並追加需要一定的時間所以對我來說,這將代碼的複雜度爲O(n),其中n爲分割點的數量。我能否提供一些建議讓代碼更快?
在不可變映射中插入和搜索是'O(log n)',你使用哪一個? – Lee
需要優化的工作代碼屬於http://codereview.stackexchange.com/ –
對不起,我添加了導入,但我使用了一個可變的Map。 – alifirat