在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
添加任何方法
缓冲区必须已经实现IndexedSeq
接口并且根据文档
它应该满足IndexedSeq
的非功能性要求。
那么为什么Buffer
不是IndexedSeq
。
答案 0 :(得分:5)
Buffer
不是IndexedSeq
,因为它不保证接近恒定时间元素访问和长度计算。例如,ListBuffer
也不支持,正如您在此description of the performance characteristics of Scala collections中所看到的那样。