LinkedList的用例

时间:2012-10-02 12:01:56

标签: scala linked-list scala-collections

这篇文章只讨论scala.collection.mutable.LinkedList。其他实现不是该主题的主题。

我的问题是:这门课的用例是什么?我发现它具有可变和不可变类型结构的问题,同时产生无效的好处。我这样说是因为:

  • API看起来好像它是一个不可变的API(filtermapdroptake等都会返回一个新的LinkedList而不是进行就地修改)
  • 不可变链表的所有好处,至少我猜,不存在,即结构之间的最大共享,因为它们仍然是可变的(通过var elemvar next

基本上我们有一个线性访问时间,线性附加时间,线性空间等,并且在空间复杂性或推理代码的能力方面没有任何显示(除了可能是O(1)前置,但它仍然是如此不可变列表)。

我是否看不到这种结构的重要好处?我正在寻找适用于本课程的客观测量和/或用例。

1 个答案:

答案 0 :(得分:5)

我说原因很复杂 - 链表类允许您在列表中间保存对节点的引用,并在该节点使用insertupdate,而不是通过列表的头部。

[] --> [] --> ... --> [] --> ... --> [] --|
^                     ^
head                  myReference

在我确切知道某个序列发生变化的应用程序(上面myReference)的应用程序中,修改该位置所花费的成本比将所有内容复制到该位置的成本要低得多{{{ 1}}(即我只是在immutable.List之后插入一个新节点。)

myReference

此类应用程序的一个示例 - L-system,您可以在其中展开字符串的一部分。插入新节点比在每次需要扩展时复制整个字符串要便宜得多。

另一个原因是完整性 - 由于 myNewNode v [] --> [] --> ... --> [] --> [] ---> ... --> [] --| ^ ^ head myReference DoubleLinkedList共享了许多常见的基础架构,因此提供额外的LinkedListLike类作为标准库大小的低成本。