在Scala的编程(Martin Odersky)的第17.1节(集合)中,有一行说:
使用
ListBuffer
而不是List
的另一个原因是为了防止堆栈溢出的可能性。
使用ListBuffer
如何防止堆栈溢出的可能性? ......没有双关语; - )
答案 0 :(得分:0)
这本书给出了the answer:
如果你可以通过预先设置按所需顺序构建一个列表,但是所需的递归算法不是尾递归的,你可以使用for表达式或while循环和ListBuffer。
An example用于在不使用List
函数的情况下递增map
的每个元素的函数。
def incAllUnsafe(xs: List[Int]): List[Int] = xs match {
case List() => List()
case x :: xs1 => x + 1 :: incAllUnsafe(xs1)
}
def incAllSafe(xs: List[Int]): List[Int] = {
val buf = new scala.collection.mutable.ListBuffer[Int]
for (x <- xs) buf += x + 1
buf.toList
}