This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 11.2, “How to Create a Mutable List in Scala (ListBuffer)”
Problem
You want to use a mutable list — a LinearSeq
, as opposed to an IndexedSeq
— but a Scala List
isn’t mutable.
Solution: ListBuffer
Use the Scala ListBuffer class, and convert the ListBuffer
to a List
when needed. The following examples demonstrate how to create a ListBuffer
, and then add and remove elements, and then convert it to a List
when finished:
import scala.collection.mutable.ListBuffer var fruits = new ListBuffer[String]() // add one element at a time to the ListBuffer fruits += "Apple" fruits += "Banana" fruits += "Orange" // add multiple elements fruits += ("Strawberry", "Kiwi", "Pineapple") // remove one element fruits -= "Apple" // remove multiple elements fruits -= ("Banana", "Orange") // remove multiple elements specified by another sequence fruits --= Seq("Kiwi", "Pineapple") // convert the ListBuffer to a List when you need to val fruitsList = fruits.toList
Discussion
Because a List
is immutable, if you need to create a list that is constantly changing, the preferred approach is to use a ListBuffer
while the list is being modified, then convert it to a List
when a List
is needed.
The ListBuffer
Scaladoc states that a ListBuffer
is “a Buffer implementation backed by a list. It provides constant time prepend and append. Most other operations are linear.” So, don’t use ListBuffer
if you want to access elements arbitrarily, such as accessing items by index (like list(10000)
); use ArrayBuffer
instead. See Recipe 10.4, “Understanding the Performance of Collections” for more information.
Although you can’t modify the elements in a List
, you can create a new List
from an existing one, typically prepending items to the original list with the ::
method:
scala> val x = List(2) x: List[Int] = List(2) scala> val y = 1 :: x y: List[Int] = List(1, 2) scala> val z = 0 :: y z: List[Int] = List(0, 1, 2)
This is discussed more in Recipe 11.3, “Adding Elements to a List”.
this post is sponsored by my books: | |||
#1 New Release |
FP Best Seller |
Learn Scala 3 |
Learn FP Fast |