5

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

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

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

4

3 回答 3

4

可变的:ArrayBuffer
不可变的:Vector

于 2010-08-21T06:40:12.760 回答
4

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

于 2010-08-21T13:36:19.483 回答
2

Vector. IndSeq来自scalaz的应该会更好。

于 2010-08-21T07:24:29.580 回答