【问题标题】:Seq for fast random access and fast growth in ScalaSeq 用于 Scala 中的快速随机访问和快速增长
【发布时间】:2010-08-21 06:09:46
【问题描述】:

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

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

目前我似乎使用可变 ArrayBuffer 获得了良好的性能,但还有什么更好的吗?是否有一个不变的替代方案也可以?提前致谢。

【问题讨论】:

标签: scala scala-collections


【解决方案1】:

可变:ArrayBuffer
不可变:Vector

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      VectorIndSeq 来自scalaz 应该会更好。

      【讨论】:

      • 在即将发布的 Scalaz 5.1 版本中还有绳索。
      • “经常需要在任意索引处删除和插入项目”应该(非常)稍差。
      猜你喜欢
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多