2

在 scala 集合库中Buffer继承自Seq

Buffer[A] extends Seq[A] with GenericTraversableTemplate[A, Buffer] with BufferLike[A, Buffer[A]] with scala.Cloneable

并且Buffer文档说:

缓冲区用于通过追加、前置或插入新元素来增量创建元素序列。也可以通过当前序列中元素的索引以随机访问方式访问和修改元素。

IndexedSeq文档说:

索引序列的基本特征。

索引序列支持恒定时间或接近恒定时间的元素访问和长度计算。它们是根据抽象方法定义的,适用于索引和长度。

索引序列不会向 Seq 添加任何新方法,但承诺有效实现随机访问模式。

由于Buffer已经扩展Seq并且IndexedSeq没有向Seq Buffer 添加任何方法,因此必须已经实现了IndexedSeq接口,并且根据文档,它应该满足IndexedSeq. 那么为什么Buffer不是IndexedSeq.

4

1 回答 1

5

Buffer不是IndexedSeq因为它不能保证接近恒定时间的元素访问和长度计算。例如,ListBuffer两者都不支持,正如您在Scala 集合的性能特征的描述中看到的那样。

于 2013-02-28T18:25:21.120 回答