我们知道 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/