Kotlin MutableList: Wie man eine leere Liste erstellt und nicht verrückt wird

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Das Paradoxon der leeren Liste in Kotlin

\n\n

Stellen Sie sich vor: Sie programmieren in Kotlin und müssen eine Liste erstellen, die dynamisch befüllt wird. Sie wissen, dass List eine unveränderliche Sammlung ist und MutableList genau das, was der Arzt verordnet hat. Aber sobald Sie val list = MutableList() schreiben, gibt der Compiler einen Fehler aus. Kommt Ihnen bekannt vor?

\n\n

Diese Frage ist eine der beliebtesten auf Stack Overflow unter Kotlin-Neulingen (und nicht nur). Tausende Entwickler stolpern über denselben Haken: Wie initialisiert man einen leeren MutableList korrekt? Es scheint eine Kleinigkeit zu sein, aber ohne sie funktioniert kein dynamischer Algorithmus.

\n\n

In diesem Artikel werden wir alle legalen Methoden durchgehen, um eine leere veränderbare Liste in Kotlin zu erstellen. Von einfachen Lifehacks bis hin zu fortgeschrittenen Techniken. Sie werden erfahren, warum mutableListOf() Ihr bester Freund ist und ArrayList() ein alter, aber zuverlässiger Kamerad. Los geht's!

\n\n

1. Warum funktioniert einfaches MutableList() nicht?

\n\n

Räumen wir gleich mit dem Mythos auf. Wenn Sie versuchen, Folgendes zu schreiben:

\n\n
// Compiler-Fehler!\nval list = MutableList()
\n\n

Wird der Compiler zu Recht protestieren. Warum? Weil MutableList ein Interface und keine konkrete Klasse ist. Ein Interface kann nicht instanziiert werden. Das ist, als würde man versuchen, "einfach ein Auto" ohne Angabe von Marke und Modell zu erstellen. Kotlin erfordert eine konkrete Implementierung.

\n\n

Glücklicherweise haben wir mehrere elegante Möglichkeiten, diese Einschränkung zu umgehen.

\n\n

2. Der einfachste Weg: mutableListOf()

\n\n

Dies ist der König der leeren Listen. Eine Standard-Factory-Funktion aus der Kotlin-Standardbibliothek:

\n\n
val emptyList = mutableListOf<String>()\nprintln(emptyList) // Ausgabe: []\nprintln(emptyList.size) // Ausgabe: 0
\n\n

Warum das großartig ist:

\n
    \n
  • Sie müssen den Typ nicht angeben, wenn er aus dem Kontext abgeleitet werden kann
  • \n
  • Erstellt einen MutableList mit dem Typ ArrayList unter der Haube
  • \n
  • Liest sich wie "erstelle mir eine veränderbare Liste aus nichts"
  • \n
\n\n

Elemente hinzuzufügen ist ein Kinderspiel:

\n\n
val numbers = mutableListOf<Int>()\nnumbers.add(1)\nnumbers.add(2)\nnumbers.add(3)\nprintln(numbers) // [1, 2, 3]
\n\n

Diese Methode eignet sich für 90% der Fälle. Merken Sie sie sich als die wichtigste.

\n\n

3. Der klassische ArrayList() – die Rückkehr des Königs

\n\n

Wenn Sie aus Java kommen, wird Ihnen diese Methode vertraut vorkommen. Kotlin ist vollständig kompatibel mit dem Java Collections Framework, daher können Sie ArrayList direkt verwenden:

\n\n
val list = ArrayList<String>()\nprintln(list) // []
\n\n

Es gibt jedoch einen Haken: ArrayList ist eine konkrete Implementierung des Interfaces MutableList. Wenn Sie später die Implementierung ändern möchten (z.B. auf LinkedList), müssen Sie den Variablentyp ändern. In diesem Sinne ist mutableListOf() flexibler, da es einen MutableList zurückgibt.

\n\n

Wann ArrayList() verwenden:

\n
    \n
  • Wenn maximale Leistung erforderlich ist (ArrayList ist schneller als LinkedList beim Zugriff über Index)
  • \n
  • Wenn Sie mit Java-Bibliotheken arbeiten, die genau ArrayList erwarten
  • \n
  • Wenn Sie bewusst eine konkrete Implementierung wählen
  • \n
\n\n

4. Der raffinierte Weg: MutableList(size) { defaultValue }

\n\n

Manchmal ist eine leere Liste nicht wirklich "leer". Es kann vorkommen, dass Sie eine Liste mit einer vorab bekannten Größe, aber mit leeren Werten erstellen müssen. Dafür gibt es eine Überladung des Konstruktors:

\n\n
// Erstellt eine Liste mit 5 Elementen, jedes ist ein leerer String\nval list = MutableList(5) { "" }\nprintln(list) // [, , , , ]\nprintln(list.size) // 5
\n\n

Dies ist keine wirklich leere Liste, sondern eine mit "Platzhaltern" initialisierte Liste. Nützlich, wenn Sie die genaue Anzahl der Elemente kennen, diese aber überschreiben werden.

\n\n

Für eine vollständige Null verwenden Sie

Blogs

Buchempfehlungen