Einleitung: Das Paradoxon der leeren Liste in Kotlin
\n\nStellen 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?
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.
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!
1. Warum funktioniert einfaches MutableList() nicht?
\n\nRäumen wir gleich mit dem Mythos auf. Wenn Sie versuchen, Folgendes zu schreiben:
\n\n// Compiler-Fehler!\nval list = MutableList()\n\nWird 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.
Glücklicherweise haben wir mehrere elegante Möglichkeiten, diese Einschränkung zu umgehen.
\n\n2. Der einfachste Weg: mutableListOf()
\n\nDies ist der König der leeren Listen. Eine Standard-Factory-Funktion aus der Kotlin-Standardbibliothek:
\n\nval emptyList = mutableListOf<String>()\nprintln(emptyList) // Ausgabe: []\nprintln(emptyList.size) // Ausgabe: 0\n\nWarum das großartig ist:
\n- \n
- Sie müssen den Typ nicht angeben, wenn er aus dem Kontext abgeleitet werden kann \n
- Erstellt einen
MutableListmit dem TypArrayListunter der Haube \n - Liest sich wie "erstelle mir eine veränderbare Liste aus nichts" \n
Elemente hinzuzufügen ist ein Kinderspiel:
\n\nval numbers = mutableListOf<Int>()\nnumbers.add(1)\nnumbers.add(2)\nnumbers.add(3)\nprintln(numbers) // [1, 2, 3]\n\nDiese Methode eignet sich für 90% der Fälle. Merken Sie sie sich als die wichtigste.
\n\n3. Der klassische ArrayList() – die Rückkehr des Königs
\n\nWenn 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:
val list = ArrayList<String>()\nprintln(list) // []\n\nEs 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.
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
4. Der raffinierte Weg: MutableList(size) { defaultValue }
\n\nManchmal 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\nDies 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\nFür eine vollständige Null verwenden Sie
Blogs
Buchempfehlungen
Lesen Sie auch
Angular kann Dienst nicht injizieren: Vollständige Fehleranalyse
KI-Assistent in Java: Code schneller und intelligenter schreiben
Sortierung eines Objektarrays nach Zeichenfolge: 5 Methoden für JavaScript
Telegram-Bot in TypeScript: Schreiben eines intelligenten Assistenten von Grund auf
Kotlin-Entwickler Karriere: Gehälter, Perspektiven & Markt 2025