ArrayBuffer的大小

dvi*_*gal 3 scala scala-collections

假设我创建初始大小等于10的ArrayBuffer

val buf = new ArrayBuffer[Int](10)
Run Code Online (Sandbox Code Playgroud)

如果我确实调用了方法buf.size - 缓冲区的大小是否等于0?

axe*_*l22 10

数组缓冲区类是一个可扩展的数组,您可以在其中使用最终有效地添加元素+=.最初,在创建时,元素的数量为0 - 被称为size集合的数量.

在内部,数组缓冲区维护一个元素数组,null在创建缓冲区时只包含s.添加元素后,会在数组中进行写入.当数组变满时,将分配一个具有双倍长度的新数组,并将元素复制到其中.添加元素的摊销时间仍为O(1).

ctor参数只是说明内部数组的初始长度是多少.虽然更改初始长度不会改变其摊销成本,+=但如果您知道要添加多少元素,则可以避免不必要的重新分配,从而提高效率(实质上,减少摊销分析中的常量).

这个参数被称为不是大小,而是数组缓冲区的容量.


Mar*_*ing 5

是的,因为size(在这种情况下,继承自IndexedSeq)是指集合中元素的数量,而不是基础数据结构的大小或长度。