为什么Buffer不是IndexedSeq的子类?

Dan*_*ler 2 scala scala-collections

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

Buffer[A] extends Seq[A] with GenericTraversableTemplate[A, Buffer] with BufferLike[A, Buffer[A]] with scala.Cloneable
Run Code Online (Sandbox Code Playgroud)

并且Buffer文件说:

缓冲区用于通过追加,预先添加或插入新元素来递增地创建元素序列.还可以通过当前序列中的元素的索引以随机访问方式访问和修改元素.

虽然IndexedSeq文档说:

索引序列的基本特征.

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

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

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

Dan*_*ral 5

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