Add an element by creating a new list.

build-list Appending with `:+` returns a new list and leaves the original unchanged. The old list keeps its size, so earlier code still sees the same values.

Building a New List

extra
BuildList.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val extra = 4
    val base = List(1, 2, 3)
    val grown = base :+ extra

    println("base=" + base.mkString(","))
    println("grown=" + grown.mkString(","))
    println("baseSize=" + base.length)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val extra = 5
    val base = List(1, 2, 3)
    val grown = base :+ extra

    println("base=" + base.mkString(","))
    println("grown=" + grown.mkString(","))
    println("baseSize=" + base.length)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val extra = 9
    val base = List(1, 2, 3)
    val grown = base :+ extra

    println("base=" + base.mkString(","))
    println("grown=" + grown.mkString(","))
    println("baseSize=" + base.length)
  }
}
  1. extra ← 4, base ← List(1, 2, 3), grown ← List(1, 2, 3, 4)

    1object Main {2  def main(args: Array[String]): Unit = {3    val extra→ 4 = 4 //@extra=5, 94    val base→ List(1, 2, 3) = List(1, 2, 3)5    val grown→ List(1, 2, 3, 4) = baseList(1, 2, 3) :+ extra467    println("base=" + baseList(1, 2, 3).mkString(","))8    println("grown=" + grownList(1, 2, 3, 4).mkString(","))9    println("baseSize=" + base.length3)10  }11}
    outputbase=1,2,3
    grown=1,2,3,4
    baseSize=3
  1. extra ← 5, base ← List(1, 2, 3), grown ← List(1, 2, 3, 5)

    1object Main {2  def main(args: Array[String]): Unit = {3    val extra→ 5 = 54    val base→ List(1, 2, 3) = List(1, 2, 3)5    val grown→ List(1, 2, 3, 5) = baseList(1, 2, 3) :+ extra567    println("base=" + baseList(1, 2, 3).mkString(","))8    println("grown=" + grownList(1, 2, 3, 5).mkString(","))9    println("baseSize=" + base.length3)10  }11}
    outputbase=1,2,3
    grown=1,2,3,5
    baseSize=3
  1. extra ← 9, base ← List(1, 2, 3), grown ← List(1, 2, 3, 9)

    1object Main {2  def main(args: Array[String]): Unit = {3    val extra→ 9 = 94    val base→ List(1, 2, 3) = List(1, 2, 3)5    val grown→ List(1, 2, 3, 9) = baseList(1, 2, 3) :+ extra967    println("base=" + baseList(1, 2, 3).mkString(","))8    println("grown=" + grownList(1, 2, 3, 9).mkString(","))9    println("baseSize=" + base.length3)10  }11}
    outputbase=1,2,3
    grown=1,2,3,9
    baseSize=3