scala - Scala 中的不可变数据结构

标签 scala functional-programming

我们知道 Scala 支持不可变的数据结构。即每次更新列表时,它都会在堆中创建一个新的对象和引用。

示例

val xs:List[Int] = List.apply(22)
val newList = xs ++ (33)

因此,当我将第二个元素追加到列表中时,它将创建一个新列表,其中包含 22 和 33。这与 Java 中不可变字符串的工作方式完全相同。 所以问题是每次我在列表中追加一个元素时,每次都会创建一个新对象。这个 l 对我来说看起来效率不高。 处理这个问题时是否使用了一些特殊的数据结构,例如持久数据结构。有人知道吗?

最佳答案

追加到列表的复杂度为 O(n),而且效率低下。一般方法是在构建列表时添加到列表前面,最后反转它。

现在,您关于创建新对象的问题仍然适用于前置。请注意,由于 xs 是不可变的,因此 newList 仅指向 xs 以获取前置后的其余数据。

关于scala - Scala 中的不可变数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27017166/

相关文章:

Scala.Either getOrElse 方法

list - 使用冒泡排序按长度对列表中的列表进行排序 - Haskell

ios - Swift 中的函数式图形

scala - 这个 Spark/Scala 代码的性能瓶颈在哪里?

scala - Akka 在 Actor 之外进行日志记录

scala - FS2 Stream 异常处理不起作用

scala - 如何并排组合两个流?

generics - 如何获取 Scala 中类型的默认值?

scala - 你能在 scala 中使用 varargs 柯里化(Currying)一个函数吗?

javascript - 如何使用 Ramda 将数组数组转换为对象数组?