Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Scala中快速随机访问和快速增长的Seq_Scala_Scala Collections - Fatal编程技术网

用于Scala中快速随机访问和快速增长的Seq

用于Scala中快速随机访问和快速增长的Seq,scala,scala-collections,Scala,Scala Collections,对于以下场景,最好的Scala集合(在2.8+中)是可变的还是不可变的: 按顺序排列,因此我可以按位置访问项目(a Seq) 需要经常插入项目,因此集合必须能够在没有太多惩罚的情况下增长 随机访问,通常需要删除和插入集合中任意索引处的项 目前,我似乎在可变阵列缓冲中获得了良好的性能,但还有更好的吗?有没有一个不变的替代方案也可以?提前感谢。可变:ArrayBuffer 不可变:向量向量IndSeqfrom应该更好。如果您在随机位置插入的项超过访问它们的时间的log(N)/N,那么您可能应该使

对于以下场景,最好的Scala集合(在2.8+中)是可变的还是不可变的:

  • 按顺序排列,因此我可以按位置访问项目(a Seq)
  • 需要经常插入项目,因此集合必须能够在没有太多惩罚的情况下增长
  • 随机访问,通常需要删除和插入集合中任意索引处的项

目前,我似乎在可变阵列缓冲中获得了良好的性能,但还有更好的吗?有没有一个不变的替代方案也可以?提前感谢。

可变:
ArrayBuffer


不可变:
向量

向量
IndSeq
from应该更好。

如果您在随机位置插入的项超过访问它们的时间的log(N)/N,那么您可能应该使用
immutable.TreeSet
,因为所有操作都是O(log(N))。如果您主要是访问或添加到(远端)端,
ArrayBuffer
Vector
工作得很好。

您可能需要阅读Martin Odersky和Lex Spoon编写的这篇优秀的API集合文档:谢谢-我不知怎么错过了这篇文章。在即将发布的Scalaz 5.1版本中,这篇文章应该(非常)稍微差一点“经常需要在任意索引处删除和插入项”。