Scala 列表实现与 for 表达式深度解析
1. Scala 列表类的实际实现
在实际应用中,Scala 列表类的方法实现会避免递归,转而使用带有列表缓冲区的循环,以避免栈溢出问题。例如, List
类中 map
方法的实际实现如下:
final override def map[U](f: T => U): List[U] = {
val b = new ListBuffer[U]
var these = this
while (!these.isEmpty) {
b += f(these.head)
these = these.tail
}
b.toList
}
这个实现通过简单的循环遍历列表,效率很高。尾递归实现也有类似的效率,但普通递归实现会更慢且扩展性较差。
ListBuffer
类在实现列表时起到了重要作用。它的元素以列表形式表示,添加新元素涉及修改列表中最后一个 ::
单元格的 tl
字段。以下是 ListBuffer
类的部分定义:
package scala.collection.immutable
final class ListBuffer[T] extends Buffer[T] {
private var start: List[T] = Nil
p