Scala标准库中ArrayBuffer实现的效率可能较低

时间:2019-04-28 19:12:55

标签: scala performance buffer arraybuffer

在学习编程时,我认为我偶然发现了Scala的效率低下,因为我们的资料中的描述是正确的。我的一个朋友在国际信息学奥林匹克大会上获得了银牌和铜牌,证实了更轻松实施的可能性。

在我们的学习材料中,其内容为:“例如,对于ArrayBuffer,在末尾追加元素非常有效:由于内部数组的大小始终加倍,因此很少分配和复制到新数组。相比之下,在元素的开头添加元素会很耗时,因为会分配一个新的内部数组,并且每次调用该方法时都会将元素复制到该元素。”

是否存在另一个存储索引的数组,以便始终将元素添加到末尾?

1 个答案:

答案 0 :(得分:1)

可能会有第二个包含索引的数组,但是由于许多原因,效率会降低:

  1. 索引数组将需要额外的存储空间

  2. 访问元素至少需要两次内存读取,而不是一次。

  3. 如果不对索引进行排序,则每次访问都需要搜索索引数组

  4. 如果对索引进行排序,则该数组存在与原始数组完全相同的问题。