use*_*486 5 performance scala list
我是Scala的新手,我正在尝试获取随机双值列表:
问题是,当我尝试运行它时,与Java对应物相比,它需要的时间太长.关于为什么会这样或有关更有效方法的建议的任何想法?
def random: Double = java.lang.Math.random()
var f = List(0.0)
for (i <- 1 to 200000)
( f = f ::: List(random*100))
f = f.tail
Run Code Online (Sandbox Code Playgroud)
Ant*_*jdr 21
你也可以这样做:
List.fill(200000)(math.random)
Run Code Online (Sandbox Code Playgroud)
同样适用于例如Array ...
Array.fill(200000)(math.random)
Run Code Online (Sandbox Code Playgroud)
等......
您可以构建无限的随机双精度流:
def randomList(): Stream[Double] = Stream.cons(math.random, randomList)
val f = randomList().take(200000)
Run Code Online (Sandbox Code Playgroud)
这将利用延迟评估,因此在您实际需要之前不会计算值.即使评估所有200,000,也会很快.作为额外的奖励,f不再需要成为一个var.
另一种可能性是:
val it = Iterator.continually(math.random)
it.take(200000).toList
Run Code Online (Sandbox Code Playgroud)
Streamcontinually如果你愿意,也有一种方法.
首先,它没有比java更长的时间,因为没有java对应物.Java没有不可变列表.如果确实如此,表现将大致相同.
其次,由于附加列表具有线性性能,因此需要花费大量时间,因此整个事物具有二次性能.
而不是附加,前置,具有持续的性能.