为什么Buffer不是IndexedSeq的子类?

时间:2013-02-28 18:17:57

标签: scala scala-collections

在scala集合库中,Buffer继承自Seq

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

Buffer文档说:

  

缓冲区用于逐步创建元素序列   附加,前置或插入新元素。这也是可能的   通过索引以随机访问方式访问和修改元素   当前序列中的元素。

IndexedSeq文档说:

  

索引序列的基本特征。

     

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

     

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

由于Buffer已经延伸SeqIndexedSeq未向Seq添加任何方法 缓冲区必须已经实现IndexedSeq接口并且根据文档 它应该满足IndexedSeq的非功能性要求。 那么为什么Buffer不是IndexedSeq

1 个答案:

答案 0 :(得分:5)

Buffer不是IndexedSeq,因为它不保证接近恒定时间元素访问和长度计算。例如,ListBuffer也不支持,正如您在此description of the performance characteristics of Scala collections中所看到的那样。