scala - Scala 中的结构共享列表

标签 scala structure sharing data-sharing

我有一个关于 Scala 中列表的结构共享的问题。我在网上看过这句话

List implements structural sharing of the tail list. This means that many operations are either zero- or constant-memory cost.

但我真的不明白如何减少列表操作的时间和内存成本。例如

val mainList = List(3, 2, 1)
val with4 =    4 :: mainList // O(1)

如果我们想用 4 时间创建另一个列表,则只需 O(1),并且内存成本为 1,但是对于列表的操作会有什么不同?我的意思是使用 length() 或 reverse() ...它仍然是 O(n) 正常吗?任何人都可以解释一下我吗?如果可以的话,也许一个例子会非常有帮助。谢谢!

最佳答案

由于结构共享,列表上运行时间为常数 (O(1)) 的操作包括前置 (::)、头和尾。大多数其他操作都是线性时间 (O(n))。

你的例子是正确的 4::myList 是常数时间,myList.headmylist.tail 也是如此,其他的东西比如 lengthreverse 是线性时间。

这就是为什么 List 在大多数情况下不是一个特别好的集合,除非您只使用这些操作,因为其他一切都是 O(n)。

您可以引用http://docs.scala-lang.org/overviews/collections/performance-characteristics.html了解不同集合的运行时特征的概述。

关于scala - Scala 中的结构共享列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033734/

相关文章:

scala - 将 DataFrame 映射到案例类时,为什么 Some(null) 会转换为 None

scala - 在 Scala 的父特性中声明子特性的 self 类型

javascript - 使用 Spine.js 的真实世界 Web 应用程序结构

c - 在程序参数中传递指向数组的指针

scala - 为什么在 Scala 中应该更喜欢 Option 进行错误处理而不是异常?

scala - 为什么 Spark DataSet 会丢失所有模式并只返回 byte[]?

c - 将结构读/写到二进制文件中

c - 无法打印二叉树中的所有元素

css - 如何在 grails 元素之间共享通用的 css 和其他资源?

ios - 编译一个包含 sharekit 的项目