假设我创建了初始大小等于 10 的 ArrayBuffer
val buf = new ArrayBuffer[Int](10)
如果我确实调用了方法 buf.size - 缓冲区的大小是否等于 0?
最佳答案
数组缓冲区类是一个可扩展的数组,您可以在其中使用 +=
在末尾有效地添加元素.最初,在创建时,元素数为 0 - 即 size
的集合。
在内部,数组缓冲区维护一个元素数组,其中仅包含 null
s 在创建缓冲区时。一旦添加了一个元素,就会向数组中写入一次。当数组变满时,会分配一个双倍长度的新数组并将元素复制到其中。 amortized添加元素的时间仍然是 O(1)。
ctor 参数只是说明内部数组的初始长度是多少。虽然改变初始长度不会改变+=
的摊销成本如果您知道将添加多少元素,它可以避免不必要的重新分配,从而提高效率(本质上,减少了摊销分析中的常数)。
这个参数不是指大小,而是指数组缓冲区的容量。
关于scala - ArrayBuffer 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406934/