Die Klasse scala.collection.immutable.List
ist eine der am meist verwendeten Datenstrukturen
in Scala. Es handelt sich dabei um eine sequenzielle
Liste eines bestimmten Datentyps. Dementsprechend enthält eine List[Double]
nur Elemente vom Datentyp Double
.
Da List
eine unveränderliche Datenstruktur ist, können die enthaltenen Elemente
nicht verändert werden.
Der "Zustand" eines enthaltenen Elementes kann evtl. doch verändert werden,
da sich die Unveränderbarkeit nur auf die enthaltenen Referenzen, jedoch nicht auf
die in den Referenzen enthaltenen Elemente, bezieht.
List
erzeugen
Da es sich bei der Klasse scala.collection.immutable.List
um eine abstrakte Klasse
handelt, können wir eine List
nicht mit dem Schlüsselwort new
instanziieren. Eine Möglichkeit ist die Verwendung der Methode apply
aus dem
Begleitobjekt
der Klasse List
. Die Methode apply
dient hier als Factory-Methode
zur Erzeugung von Objekten des Typs List
.
scala> val list : List[Int] = List.apply(2,1,3) list: List[Int] = List(2, 1, 3)
Die Syntax von Scala erlaubt es die Angabe des Methodennamens apply
wegzulassen, wenn direkt hinter dem Klassennamen die Runden Klammern angegeben werden.
Da auch der Typparameter vom Compiler abgeleitet werden kann, ist die Erzeugung
obiger Liste auch mit folgender Syntax möglich:
scala> val list = List(2,1,3) list: List[Int] = List(2, 1, 3)
Eine weitere Möglichkeit eine List
zu erzeugen ist
die Methode ::
der Klasse List
. ::
wird
auch mit dem Namen "cons" bezeichnet. In der Operatorschreibweise
kommt auch "Cons-Operator" als Bezeichnung vor.
Da ::
eine Methode der Klasse List
ist, kann die neue List
nur auf Basis einer bestehenden List
erzeugt werden.
Ist keine List
als Basis vorhanden, kann Nil
,
welches eine leere List
repräsentiert, verwendet werden.
In der Operatorschreibweise wird die Ausgangs-List
am Ende
des gesamten Ausdrucks angegeben. Dem ist so, da der "Cons-Operator"
auf einem Doppelpunkt endet und somit die Methode auf dem rechten Operanden
ausgeführt wird.
scala> val list = 2 :: 1 :: 3 :: Nil list: List[Int] = List(2, 1, 3)
Nachdem wir nun wissen, wie wir eine List
erzeugen können, ist es nun an der Zeit
herauszufinden, wie wir wieder Zugriff auf die Elemente erhalten. Auch hier hilft uns wieder die
Methode apply
, aber diesmal aus der Begleitklasse.
Die Methode apply
erwartet hier den Index des gewünschten Objektes.
Die Indizierung der Elemente erfolgt beginnend mit 0. Um also auf das zweite Element einer
List
zuzugreifen, verwenden wir als Index 1. Nachfolgend ein REPL Beispiel,
wo eine List erzeugt wird und anschließend auf das zweite Element zugegriffen wird.
scala> val myList = List(2,11,33,22) myList: List[Int] = List(2, 11, 33, 22) scala> println(myList.apply(1)) 11
Auch hier erlaubt uns die Scala Syntax, die Angabe des Methodennamens apply
wegzulassen.
Wir können direkt nach dem Objektnamen den Index des gewünschten Elements (hier das dritte Element) in runden Klammern angegeben.
scala> println(myList(2)) 33