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