Scala 数组的 tail 函数的性能

Vah*_*idB 4 arrays performance scala

Scala 文档表示,数组序列的tail性能是Linear 的,而head性能是Constant。由于包含数组元素的整个块都被放入缓存中,因此我不希望看到数组的头部和尾部之间有任何差异。如果有人解释为什么 Scala 中数组的尾部性能是线性的,我很感激。

puh*_*len 5

tail 函数创建一个新数组,其中包含除第一个元素之外的所有元素。为此,我们需要创建数组的副本(减去第一个元素),这是一个线性时间操作。随着数组变大,需要复制的内容也越来越多。

List如果您需要高效的头部和尾部操作,请改为使用。

您可能会将 tail 与 last 混淆

  • head获取第一个元素:对于 List 和 Array,O(1)
  • last获取最后一个元素:List 为 O(n),Array 为 O(1)
  • tail获取除第一个之外的所有内容:列表为 O(1),数组为 O(n)
  • init获取除最后一个之外的所有内容:对于列表和数组,O(n)