2016-06-30 9 views
1

In Abschnitt 17.1 (Sammlungen) der Programmierung in Scala (Martin Odersky), gibt es eine Zeile, die sagt:Scala ListBuffer verhindert das Risiko eines Stack-Überlaufs?

Ein weiterer Grund für die Verwendung ListBuffer statt List ist das Potenzial für die Stack-Überlauf zu verhindern.

Wie verhindert die Verwendung eines ListBuffer das Potenzial für einen Stapelüberlauf? ... soll kein Wortspiel ;-)

Antwort

0

Das Buch selbst gibt the answer:

Wenn Sie eine Liste in der gewünschten Reihenfolge durch das Voranstellen aufbauen können, aber der rekursiven Algorithmus, der erforderlich wäre, ist nicht Schwanz rekursive Sie können stattdessen einen for expression- oder while-loop und einen ListBuffer verwenden.

An example ist für eine Funktion gegeben, daß jedes Element eines List ohne Verwendung der Funktion map inkrementiert.

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 
} 
Verwandte Themen