Scala 为什么缓冲区不是IndexedSeq的子类?
在scala集合库中,缓冲区继承自Scala 为什么缓冲区不是IndexedSeq的子类?,scala,scala-collections,Scala,Scala Collections,在scala集合库中,缓冲区继承自 Buffer[A] extends Seq[A] with GenericTraversableTemplate[A, Buffer] with BufferLike[A, Buffer[A]] with scala.Cloneable 而Buffer文档说明: 缓冲区用于按顺序递增地创建元素序列 追加、前置或插入新元素。这也是可能的 通过索引以随机访问方式访问和修改元素 当前序列中元素的 而IndexedSeqdocs则表示: 索引序列的基本特征 索引序列
Buffer[A] extends Seq[A] with GenericTraversableTemplate[A, Buffer] with BufferLike[A, Buffer[A]] with scala.Cloneable
而Buffer
文档说明:
缓冲区用于按顺序递增地创建元素序列
追加、前置或插入新元素。这也是可能的
通过索引以随机访问方式访问和修改元素
当前序列中元素的
而IndexedSeq
docs则表示:
索引序列的基本特征
索引序列支持恒定时间或接近恒定时间的元素
访问和长度计算。它们是用抽象概念来定义的
方法适用于索引和长度
索引序列不会向Seq添加任何新方法,但承诺
随机访问模式的高效实现
因为Buffer
已经扩展了Seq
并且IndexedSeq
没有向Seq
添加任何方法
缓冲区必须已经实现了IndexedSeq
接口,并符合文档要求
它应该满足IndexedSeq
的非功能性要求。
那么为什么
Buffer
不是IndexedSeqBuffer
不是IndexedSeq
,因为它不能保证接近恒定的时间元素访问和长度计算。例如,ListBuffer
两者都不支持,正如您在本文中所看到的。Ok,但表示也可以以随机访问方式访问和修改元素,这似乎会产生误导。我最初把Buffer和ArrayBuffer混为一谈mind@DanielMahler也可以在所有缓冲区上随机访问和修改,但不一定有效IndexedSeq
提供了效率保证。我的理解是,随机访问意味着高效的索引访问,即我不认为链表是随机访问。否则,您也可以随机访问顺序文件。FWIW似乎也接受了这一解读。我得到了你的答案;我只是认为应该更改Buffer
上的文档。