用于Scala中快速随机访问和快速增长的Seq
对于以下场景,最好的Scala集合(在2.8+中)是可变的还是不可变的:用于Scala中快速随机访问和快速增长的Seq,scala,scala-collections,Scala,Scala Collections,对于以下场景,最好的Scala集合(在2.8+中)是可变的还是不可变的: 按顺序排列,因此我可以按位置访问项目(a Seq) 需要经常插入项目,因此集合必须能够在没有太多惩罚的情况下增长 随机访问,通常需要删除和插入集合中任意索引处的项 目前,我似乎在可变阵列缓冲中获得了良好的性能,但还有更好的吗?有没有一个不变的替代方案也可以?提前感谢。可变:ArrayBuffer 不可变:向量向量IndSeqfrom应该更好。如果您在随机位置插入的项超过访问它们的时间的log(N)/N,那么您可能应该使
- 按顺序排列,因此我可以按位置访问项目(a Seq)
- 需要经常插入项目,因此集合必须能够在没有太多惩罚的情况下增长
- 随机访问,通常需要删除和插入集合中任意索引处的项
目前,我似乎在可变阵列缓冲中获得了良好的性能,但还有更好的吗?有没有一个不变的替代方案也可以?提前感谢。可变:
ArrayBuffer
不可变:
向量
向量
IndSeq
from应该更好。如果您在随机位置插入的项超过访问它们的时间的log(N)/N,那么您可能应该使用immutable.TreeSet
,因为所有操作都是O(log(N))。如果您主要是访问或添加到(远端)端,ArrayBuffer
和Vector
工作得很好。您可能需要阅读Martin Odersky和Lex Spoon编写的这篇优秀的API集合文档:谢谢-我不知怎么错过了这篇文章。在即将发布的Scalaz 5.1版本中,这篇文章应该(非常)稍微差一点“经常需要在任意索引处删除和插入项”。