scala - ArrayBuffer 的大小

标签 scala scala-collections

假设我创建了初始大小等于 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/

相关文章:

scala - 在 java 中使用 scala vararg 方法

scala - 在 Scala 中实现 java 接口(interface)

scala - 无形类型转换上的模式匹配好吗?

arrays - 如何在scala中迭代json数组

Scala:为什么我的 Scala Test 自定义匹配器无法编译?

scala - 连接一组对象中包含的集合,在 Scala 中的功能

scala - 取决于目标类型的无形 map HList

scala - 在 scala-akka actor 中,我应该在处理消息时打开一个 future 吗?

scala - 如何显式返回 Unit?

api - 用于矢量化数值计算的最佳 Scala 集合类型