假设我创建初始大小等于10的ArrayBuffer
val buf = new ArrayBuffer[Int](10)
如果我调用方法buf.size - 得到缓冲区的大小等于0?
答案 0 :(得分:8)
数组缓冲区类是一个可扩展的数组,您可以使用+=
在其中有效地添加元素。最初,在创建时,元素的数量为0 - 被称为集合的size
。
在内部,数组缓冲区维护一个元素数组,在创建缓冲区时仅包含null
个元素。添加元素后,会在数组中进行写入。当数组变满时,将分配一个具有双倍长度的新数组,并将元素复制到其中。添加元素的amortized时间仍为O(1)。
ctor参数只是说明内部数组的初始长度是多少。虽然更改初始长度不会改变+=
的摊销成本,但如果您知道要添加多少元素,则可以避免不必要的重新分配,从而提高效率(实质上,减少摊销分析中的常量)
这个参数不是大小,而是数组缓冲区的容量。
答案 1 :(得分:4)
是的,因为size
(在这种情况下继承自IndexedSeq
)是指集合中元素的数量,而不是基础数据结构的大小或长度。
答案 2 :(得分:2)
使用http://www.simplyscala.com/:
import scala.collection.mutable.ArrayBuffer
val buf = new ArrayBuffer[Int](10)
buf: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
buf.size
res0: Int = 0
buf.length
res1: Int = 0
所以我猜,答案不是10。
答案 3 :(得分:1)
初始化具有给定大小和值的arraybuffer:
ArrayBuffer.fill(10)(5)
将获得:
scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 5, 5, 5, 5, 5, 5, 5, 5, 5)