Sequences oder Collections
Wann welche Variante besser ist
Sequences oder Collections ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Sequenzen und Collections
Sowohl Sequenzen als auch Collections bieten dieselben funktionalen Operationen, werten sie aber unterschiedlich aus. Wenn Sie wissen, wann welche Variante Vorteile bietet, können Sie effizienten und gut lesbaren Code schreiben.
Rückblick auf eifrige Collections
Collections sind eifrig: Jede Operation verarbeitet alle Elemente und erzeugt sofort eine neue Collection. Bei kleinen Datenmengen ist das einfach und schnell.
fun main() {
val result = listOf(1, 2, 3).map { it + 1 }.filter { it > 2 }
println(result)
}Rückblick auf verzögerte Sequenzen
Sequenzen sind verzögert: Operationen erstellen eine Pipeline, die erst beim Konsumieren elementweise ausgeführt wird. Dadurch werden Zwischen-Collections vermieden.
fun main() {
val result = listOf(1, 2, 3).asSequence().map { it + 1 }.filter { it > 2 }.toList()
println(result)
}Wann Collections Vorteile bieten
Bei kleinen Collections und kurzen Verkettungen sind Collections normalerweise schneller und übersichtlicher. Sequenzen verursachen pro Element zusätzlichen Aufwand durch Iteratoraufrufe, der ihre Vorteile bei winzigen Datenmengen überwiegen kann.
Wann Sequenzen Vorteile bieten
Sequenzen sind im Vorteil, wenn die Datenmenge groß, die Verkettung lang ist oder Sie nur einen Teil des Ergebnisses benötigen, etwa den ersten Treffer oder die ersten N Elemente. Sie vermeiden das Erstellen großer Zwischenlisten und beenden die Verarbeitung frühzeitig.
fun main() {
val firstEvenSquare = (1..1000000).asSequence()
.map { it * it }
.first { it % 2 == 0 }
println(firstEvenSquare)
}Den Unterschied messen
Dieses Beispiel mit einem großen Wertebereich zeigt, wie eine Sequenz das Erstellen einer Zwischenliste mit einer Million Elementen vermeidet, die die eifrige Variante erzeugen würde.
fun main() {
val seqResult = (1..1000).asSequence()
.filter { it % 2 == 0 }
.map { it * 3 }
.take(3)
.toList()
println(seqResult)
}Speicherbedarf
Eifrige Verkettungen halten alle Zwischenlisten gleichzeitig im Speicher. Sequenzen lassen nur das aktuelle Element durch die Pipeline fließen, sodass der maximale Speicherbedarf auch bei langen Pipelines gering bleibt.
Vorteil des vorzeitigen Abbruchs
Wenn eine Abschlussoperation frühzeitig fertig werden kann, etwa first, find oder any, überspringen Sequenzen die übrigen Elemente. Eifrige Collections hätten dagegen bereits alle Elemente verarbeitet.
fun main() {
val found = (1..100).asSequence()
.map { println("checking $it"); it }
.any { it == 3 }
println("Found: $found")
}Auf zustandsbehaftete Operationen achten
Operationen wie sorted, distinct und groupBy benötigen alle Elemente und verringern daher den Vorteil der verzögerten Auswertung. Eine Pipeline, die von diesen Operationen dominiert wird, profitiert möglicherweise nicht von einer Sequenz.
Eine praktische Richtlinie
Als Faustregel gilt: Verwenden Sie standardmäßig Collections, wenn Übersichtlichkeit im Vordergrund steht. Wechseln Sie zu einer Sequenz, wenn Sie große Datenmengen verarbeiten, viele Operationen verketten oder nur einen kleinen Ausschnitt des Ergebnisses benötigen. Messen Sie immer nach, wenn die Leistung entscheidend ist.
Gleiche API, andere Verarbeitung
Da beide dieselben Operationsnamen verwenden, können Sie normalerweise durch Hinzufügen oder Entfernen von asSequence() und einer abschließenden Operation toList() wechseln. Dadurch lässt sich die Leistung mit geringem Risiko vergleichen.
fun main() {
val data = listOf(1, 2, 3, 4, 5)
val asList = data.map { it * 2 }.filter { it > 4 }
val asSeq = data.asSequence().map { it * 2 }.filter { it > 4 }.toList()
println(asList == asSeq)
}Kurzer Test
In welcher Situation wird eine Sequenz eine Collection höchstwahrscheinlich übertreffen?
Zusammenfassung
Collections sind eifrig und eignen sich am besten für kleine Datenmengen und übersichtlichen Code. Sequenzen sind verzögert und eignen sich dank fehlender Zwischenlisten und vorzeitiger Abbrüche am besten für große Datenmengen, lange Verkettungen oder Teilergebnisse. Achten Sie auf zustandsbehaftete Operationen. Beide verwenden dieselbe API, daher ist ein Wechsel einfach. Damit ist der Kurs zu Sequenzen abgeschlossen.
Häufig gestellte Fragen
Ist die Lektion „Sequences oder Collections“ kostenlos?
Ja — der vollständige Text von „Sequences oder Collections“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Sequences oder Collections“?
Wann welche Variante besser ist Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Sequences oder Collections“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Warum Sequences?
- Sequences erstellen
- Lazy-Operationen
- Sequences oder Collections