假设我创建了初始大小为10的ArrayBuffer
val buf = new ArrayBuffer[Int](10)如果我真的调用了方法buf.size --得到的缓冲区大小等于0?
发布于 2011-06-20 13:14:00
是的,因为size (在本例中继承自IndexedSeq)指的是集合中元素的数量,而不是底层数据结构的大小或长度。
发布于 2011-06-20 18:57:20
数组buffer类是一个可扩展的数组,您可以在其中使用+=高效地在末尾添加元素。最初,在创建元素时,元素的数量是0-这被称为集合的size。
在内部,数组缓冲区维护一个元素数组,该数组在创建缓冲区时仅包含null。一旦添加了元素,就会向数组中写入。当数组填满时,将分配一个长度为双倍的新数组,并将元素复制到其中。添加一个元素的amortized时间仍然是O(1)。
ctor参数只是说明内部数组的初始长度。虽然更改初始长度不会更改+=的摊销成本,但如果您知道将向其添加多少元素,则可以避免不必要的重新分配,从而提高效率(本质上,减少摊销分析中的常量)。
此参数不是指大小,而是指数组缓冲区的容量。
发布于 2014-04-30 13:44:00
使用给定的大小和值初始化arraybuffer:
ArrayBuffer.fill(10)(5)这将得到:
scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 5, 5, 5, 5, 5, 5, 5, 5, 5)https://stackoverflow.com/questions/6406934
复制相似问题