Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么缓冲区不是IndexedSeq的子类?_Scala_Scala Collections - Fatal编程技术网

Scala 为什么缓冲区不是IndexedSeq的子类?

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则表示: 索引序列的基本特征 索引序列

在scala集合库中,缓冲区继承自

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
不是
IndexedSeq

Buffer
不是
IndexedSeq
,因为它不能保证接近恒定的时间元素访问和长度计算。例如,
ListBuffer
两者都不支持,正如您在本文中所看到的。

Ok,但表示也可以以随机访问方式访问和修改元素,这似乎会产生误导。我最初把Buffer和ArrayBuffer混为一谈mind@DanielMahler也可以在所有
缓冲区上随机访问和修改,但不一定有效
IndexedSeq
提供了效率保证。我的理解是,随机访问意味着高效的索引访问,即我不认为链表是随机访问。否则,您也可以随机访问顺序文件。FWIW似乎也接受了这一解读。我得到了你的答案;我只是认为应该更改
Buffer
上的文档。