我刚刚读到,List
(:+)的追加操作的执行时间随的大小线性增长List
。
追加到a List
似乎很普通。为什么惯用的方法是在组件之前加上列表然后反转列表?这也不是设计失败,因为可以随时更改实现。
从我的角度来看,前置和附加都应为O(1)。
是否有任何正当理由?
2
取决于您对“合法”的定义。Scala大量使用不可变的数据结构,无处不在的匿名列表,功能组成等。默认列表实现(没有指向列表尾部的额外可变指针)适用于该样式。如果您需要一个更强大的列表,至少可以很容易地编写自己的容器,这与标准容器几乎没有区别。
—
Kilian Foth,
跨站点相关- 在Scala中将元素追加到列表的末尾 -其中有一些有关其性质的信息。这似乎是Scala中的一个列表是不可改变的,因此,你需要复制它,这是O(N)。
您可以使用Scala提供的O(1)附加时间(向量),使用许多可用的可变数据结构之一,或不可变的数据结构。
—
KChaloux
List[T]
假定您以纯函数式语言的方式使用它-通常从头开始进行解构和前置。
对于纯FP中数据结构复杂性测量的一般主题的开创性工作和分析,请阅读Okasaki的论文,该论文后来作为一本书出版。对于学习FP的任何人来说,理解如何思考如何在FP中组织数据,它都是备受推崇且非常好的阅读书。它也写得很好,易于阅读和遵循,因此完全是高质量的文本。
—
吉米·霍法2013年