Einstieg

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.

Eine 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)
itmapa.de - X2H V 0.18

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)
itmapa.de - X2H V 0.18

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)
itmapa.de - X2H V 0.18

Elementzugriff

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
itmapa.de - X2H V 0.18

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
itmapa.de - X2H V 0.18