我需要执行以下操作:
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寻找关于主题的文章,手册。
答案 0 :(得分:1)
答案在某种程度上取决于x和y之间的距离,但通常最好使用普通数组。如果您不需要对切片执行任何操作,使用视图可能会更快,但视图访问速度会更慢,因此最好远离它们。
无论如何,你肯定想要快速“应用”(日志或固定时间),在Array
,Vector
和ArrayBuffer
之间,Array
是最快的,ArrayBuffer
慢了大约50%,而Vector
的切片和使用你切片的每个元素的速度大约是两倍慢。
另外,考虑sliding
是否会做你想要的。它没有直接切片那么快,但它非常方便。
答案 1 :(得分:1)
好吧,Vector
有logN
表现,但根据您的要求,常数因素可能太大。
另一方面,也许range
可以做你想要的吗?如果确实如此,那么SortedMap
可能会提供logN
性能较小的常数因子。也许