ArrayBuffer 的大小

发布于 2024-11-15 23:48:47 字数 181 浏览 0 评论 0原文

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

val buf = new ArrayBuffer[Int](10)

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

Let suppose that i create ArrayBuffer with initial size equal 10

val buf = new ArrayBuffer[Int](10)

If i did call to method buf.size - got the size of buffer equal 0?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

少跟Wǒ拽 2024-11-22 23:48:47

数组缓冲区类旨在成为一个可扩展数组,您可以使用 += 在其中高效地在末尾添加元素。最初,在创建时,元素数量为 0 - 这称为集合的大小

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

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

该参数不是指数组缓冲区的大小,而是指数组缓冲区的容量。

The array buffer class is meant to be an extensible array in which you can efficiently add elements at the end using +=. Initially, when created, the number of elements is 0 - that is referred to as the size of the collection.

Internally, the array buffer maintains an array of elements, which contains only nulls when the buffer is created. Once an element is added, a write occurs into the array. When the array gets full, a new array with a double length is allocated and elements are copied into it. The amortized time of adding an element remains O(1).

The ctor argument simply says what the initial length of the internal array will be. Although changing the initial length does not change the amortized cost of += it can avoid unnecessary reallocations if you know how many elements you will add to it, thus being more efficient (in essence, decreasing the constant in the amortized analysis).

This argument is referred to as not the size, but as the capacity of the array buffer.

不气馁 2024-11-22 23:48:47

是的,因为 size(在本例中继承自 IndexedSeq)指的是集合中的元素数量,而不是底层数据结构的大小或长度。

Yes, because size (in this case inherited from IndexedSeq) refers to the number of elements in a collection, not the size or length of the underlying data structure.

陌路终见情 2024-11-22 23:48:47

用给定的大小和值初始化数组缓冲区:

ArrayBuffer.fill(10)(5)

这将得到:

scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 5, 5, 5, 5, 5, 5, 5, 5, 5)

To initialize an arraybuffer with given size and value:

ArrayBuffer.fill(10)(5)

which will get:

scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 5, 5, 5, 5, 5, 5, 5, 5, 5)
温柔少女心 2024-11-22 23:48:47

使用 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。

Using 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

So I guess, the answer is not 10.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文