Kotlin: List vs Array — wo liegt der Haken?
\n\nWenn Sie mindestens eine Woche lang in Kotlin programmieren, sind Sie sicherlich schon auf die Frage gestoßen: „Warum kann ich nicht einfach überall Array verwenden? Wozu brauche ich diese List und MutableList?“
Diese Frage ist eine der beliebtesten auf Stack Overflow. Und das zu Recht. Auf den ersten Blick speichern sowohl die Liste als auch das Array Elemente, man kann über den Index darauf zugreifen und sie durchlaufen. Aber wenn man tiefer gräbt, entdeckt man grundlegende Unterschiede, die sich auf die Leistung, die Codesicherheit und sogar darauf auswirken, wie Sie beim Entwerfen der Architektur denken.
\n\nIn diesem Tutorial werden wir den Unterschied zwischen List und Array in Kotlin im Detail erklären. Sie erfahren, wann Sie ein Array und wann eine Liste verwenden sollten und warum erfahrene Entwickler fast immer List wählen.
1. Grundlagen: Was ist ein Array in Kotlin?
\n\nArray in Kotlin ist eine direkte Projektion eines Java-Arrays. Es ist eine feste Sequenz von Elementen desselben Typs. Wenn Sie ein Array erstellen, reservieren Sie sofort Speicher dafür. Die Größe eines Arrays kann nach der Erstellung nicht geändert werden.
// Array erstellen\nval numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)\nprintln(numbers[0]) // 1\nnumbers[2] = 10 // Wert kann geändert werden\nprintln(numbers[2]) // 10\n\nArrays in Kotlin sind von Natur aus mutable (veränderbar): Sie können jederzeit ein Element über den Index ersetzen. Sie können jedoch kein neues Element hinzufügen oder ein vorhandenes löschen. Die Größe ist für immer festgelegt.
\n\nEigenschaften von Array:
\n- \n
- Feste Größe — es kann kein Element hinzugefügt oder gelöscht werden. \n
- Veränderbarer Inhalt — Elemente können überschrieben werden. \n
- Leistung — maximal, da es sich um direkten Speicherzugriff handelt. \n
- Primitive Arrays — es gibt spezielle Typen:
IntArray,ByteArray,FloatArrayusw. Sie arbeiten ohne Boxing, was einen Geschwindigkeitsvorteil bringt. \n
// Primitives Array — ohne Boxing\nval intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)\n\n2. Grundlagen: Was ist eine List in Kotlin?
\n\nList ist ein Interface aus der Standardbibliothek von Kotlin. Im Gegensatz zu einem Array ist eine Liste eine Abstraktion. Sie wissen nicht, wie sie die Daten intern speichert (es könnte ein ArrayList, LinkedList oder etwas anderes sein).
// Erstellen einer unveränderlichen Liste\nval fruits: List<String> = listOf("apple", "banana", "cherry")\nprintln(fruits[0]) // apple\n// fruits[0] = "orange" // Compiler-Fehler!\n\nDas Hauptmerkmal von Kotlin ist die Unterteilung in read-only (List) und mutable (MutableList).
List (read-only):
\n- \n
- Der Inhalt kann nicht geändert werden (weder hinzufügen, noch löschen, noch ersetzen). \n
- Nur lesen möglich. \n
- Sicherer für die Datenübergabe zwischen Komponenten. \n
MutableList:
\n- \n
- Elemente können hinzugefügt, gelöscht und ersetzt werden. \n
- Dynamische Größe. \n
- In der Praxis wird meistens
ArrayListunter der Haube verwendet. \n
val mutableFruits: MutableList<String> = mutableListOf("apple", "banana")\nmutableFruits.add("orange") // OK\nmutableFruits.remove("banana") // OK\nmutableFruits[0] = "pear" // OK\n\n3. Hauptunterschiede zwischen List und Array
\n\nFassen wir alles in einer übersichtlichen Tabelle zusammen (im Code als Kommentare).
\n\n// 1. Veränderbarkeit\nval array = arrayOf(1, 2, 3)\narray[0] = 99 // ✅ Funktioniert\n\nval list = listOf(1, 2, 3)\n// list[0] = 99 // ❌ Compiler-Fehler\n\nval mutableList = mutableListOf(1, 2, 3)\nmutableList[0] = 99 // ✅ Funktioniert\n\n// 2. Größe\nval fixedArray = arrayOf(1, 2, 3)\n// fixedArray.add(4) // ❌ Diese Methode gibt es nicht\n\nva