Scala 中列表实现与 for 表达式的深入探究
1. Scala 列表的实现
1.1 ListBuffer 的实现与特性
在 Scala 中,当从 toList 返回列表时,该列表必须是不可变的。但向 last0 元素追加元素会修改 start 所引用的列表。为保证列表缓冲区操作的正确性,需要操作一个新的列表。以下是 += 操作的实现:
override def += (x: T) {
if (exported) copy()
if (start.isEmpty) {
last0 = new scala.::(x, Nil)
start = last0
} else {
val last1 = last0
last0 = new scala.::(x, Nil)
last1.tl = last0
}
}
当 exported 为 true 时, += 操作会复制 start 指向的列表。不过, ListBuffer 的实现使得只有在转换为列表后还需进一步扩展的列表缓冲区才需要复制,这种情况在实际中很少见。大多数情况下,列表缓冲区会逐步添加元素,最后进行一次 toList 操作,此时无需复制。
超级会员免费看
订阅专栏 解锁全文
705

被折叠的 条评论
为什么被折叠?



