这篇文章只讨论scala.collection.mutable.LinkedList
。其他实现不是该主题的主题。
我的问题是:这门课的用例是什么?我发现它具有可变和不可变类型结构的问题,同时产生无效的好处。我这样说是因为:
filter
,map
,drop
,take
等都会返回一个新的LinkedList
而不是进行就地修改)var elem
和var next
。基本上我们有一个线性访问时间,线性附加时间,线性空间等,并且在空间复杂性或推理代码的能力方面没有任何显示(除了可能是O(1)前置,但它仍然是如此不可变列表)。
我是否看不到这种结构的重要好处?我正在寻找适用于本课程的客观测量和/或用例。
答案 0 :(得分:5)
我说原因很复杂 - 链表类允许您在列表中间保存对节点的引用,并在该节点使用insert
或update
,而不是通过列表的头部。
[] --> [] --> ... --> [] --> ... --> [] --|
^ ^
head myReference
在我确切知道某个序列发生变化的应用程序(上面myReference
)的应用程序中,修改该位置所花费的成本比将所有内容复制到该位置的成本要低得多{{{ 1}}(即我只是在immutable.List
之后插入一个新节点。)
myReference
此类应用程序的一个示例 - L-system,您可以在其中展开字符串的一部分。插入新节点比在每次需要扩展时复制整个字符串要便宜得多。
另一个原因是完整性 - 由于 myNewNode
v
[] --> [] --> ... --> [] --> [] ---> ... --> [] --|
^ ^
head myReference
和DoubleLinkedList
共享了许多常见的基础架构,因此提供额外的LinkedListLike
类作为标准库大小的低成本。