scala中的LinkedList与MutableList

时间:2013-01-04 14:44:01

标签: scala pointers data-structures scala-collections

下面是这两种数据结构的描述:(来自 scala编程书)

  

关联列表

     

链接列表是由节点组成的可变序列   与下一个指针相关联。在大多数语言中,null将是   选为空链表。这对Scala不起作用   集合,因为即使空序列也必须支持所有序列   方法。 LinkedList.empty.isEmpty,特别应该返回true   而不是抛出NullPointerException。空链表被编码   而是以一种特殊的方式:他们的下一个字段指向节点   本身。就像他们不可变的表兄弟一样,链表最好运作   按顺序排列。此外,链接列表可以轻松插入   元素或链表到另一个链表。

     

可变列表

     

MutableList由单个链表和指针组成   它指的是该列表的终端空节点。这就是列表   附加一个恒定的时间操作,因为它避免了必须   遍历列表以搜索其终端节点。 MutableList是   目前是Scala中mutable.LinearSeq的标准实现。

主要区别是在MutableList类型中添加了最后一个元素的指针。

问题是:偏好LinkedList而不是MutableList的用法可能是什么?严格来说MutableList是否严格(尽管有新的指针)是等效的,只需添加一小部分已用内存(最后一个元素的指针)就更实用了吗?

1 个答案:

答案 0 :(得分:1)

由于MutableList包裹LinkedList,因此大多数操作都涉及额外的间接步骤。请注意,换行意味着它包含LinkedListindeed two, because of the efficient last element lookup)的内部变量。因此,链表是实现可变列表所必需的构建块。

如果您不需要前置或查找最后一个元素,那么您可以选择LinkedList。 Scala为您提供了大量的数据结构选择,因此最好先制作一份所需的所有操作清单(以及它们的首选效率),然后选择最适合的。

通常,我建议您使用immutable structures,它们通常与可变的一样有效,并且不会产生并发问题。