什么是最快的切片收集?

时间:2011-02-22 13:37:17

标签: scala scala-collections

我需要执行以下操作:

collection.slice(x, y)
....
collection.slice(x+1, y+1)
...
collection.slice(x+n, y+n)

collection.slice(x-n, y-n)

通常会执行这部分代码,所以我希望尽可能快地执行。我应该选择什么样的系列? (可以是不可变的。)

P.S。在Performance Characteristics页面上“申请”特征负责切片?

P.P.S寻找关于主题的文章,手册。

2 个答案:

答案 0 :(得分:1)

答案在某种程度上取决于x和y之间的距离,但通常最好使用普通数组。如果您不需要对切片执行任何操作,使用视图可能会更快,但视图访问速度会更慢,因此最好远离它们。

无论如何,你肯定想要快速“应用”(日志或固定时间),在ArrayVectorArrayBuffer之间,Array是最快的,ArrayBuffer慢了大约50%,而Vector的切片和使用你切片的每个元素的速度大约是两倍慢。

另外,考虑sliding是否会做你想要的。它没有直接切片那么快,但它非常方便。

答案 1 :(得分:1)

好吧,VectorlogN表现,但根据您的要求,常数因素可能太大。

另一方面,也许range可以做你想要的吗?如果确实如此,那么SortedMap可能会提供logN性能较小的常数因子。也许