下面是这两种数据结构的描述:(来自 scala编程书)
关联列表
链接列表是由节点组成的可变序列 与下一个指针相关联。在大多数语言中,null将是 选为空链表。这对Scala不起作用 集合,因为即使空序列也必须支持所有序列 方法。 LinkedList.empty.isEmpty,特别应该返回true 而不是抛出NullPointerException。空链表被编码 而是以一种特殊的方式:他们的下一个字段指向节点 本身。就像他们不可变的表兄弟一样,链表最好运作 按顺序排列。此外,链接列表可以轻松插入 元素或链表到另一个链表。
可变列表
MutableList由单个链表和指针组成 它指的是该列表的终端空节点。这就是列表 附加一个恒定的时间操作,因为它避免了必须 遍历列表以搜索其终端节点。 MutableList是 目前是Scala中mutable.LinearSeq的标准实现。
主要区别是在MutableList
类型中添加了最后一个元素的指针。
问题是:偏好LinkedList
而不是MutableList
的用法可能是什么?严格来说MutableList
是否严格(尽管有新的指针)是等效的,只需添加一小部分已用内存(最后一个元素的指针)就更实用了吗?
答案 0 :(得分:1)
由于MutableList
包裹LinkedList
,因此大多数操作都涉及额外的间接步骤。请注意,换行意味着它包含LinkedList
(indeed two, because of the efficient last element lookup)的内部变量。因此,链表是实现可变列表所必需的构建块。
如果您不需要前置或查找最后一个元素,那么您可以选择LinkedList
。 Scala为您提供了大量的数据结构选择,因此最好先制作一份所需的所有操作清单(以及它们的首选效率),然后选择最适合的。
通常,我建议您使用immutable structures,它们通常与可变的一样有效,并且不会产生并发问题。