Scala:帮助我理解List性能

时间:2016-01-28 08:10:52

标签: performance list scala big-o

List Scaladoc说:

  

时间:列表有O(1)前置和头/尾访问。

val mainList = List(3, 2, 1)
val with4 =    4 :: mainList  // re-uses mainList, costs one :: instance
val with42 =   42 :: mainList // also re-uses mainList, cost one :: instance
val shorter =  mainList.tail  // costs nothing as it uses the same 2::1::Nil instances as mainList

它是什么意思"花费一个::实例"? (O(1)的引用是提供背景,而不是我所问的。我的问题是评论声明。)

1 个答案:

答案 0 :(得分:3)

我认为costs one :: instance表示内存消耗。执行4 :: mainList后,scala将创建一个新的单::个实例。执行mainList.tail时,scala不必创建任何内容。

这显示非常重要,因为对于整个块

val mainList = List(3, 2, 1)
val with4 =    4 :: mainList  // re-uses mainList, costs one :: instance
val with42 =   42 :: mainList

Scala只发出5个::个实例,而不是8个。

绝对不是关于性能,因为你不能说mainList.tail在性能方面没有任何成本。