Kotlin Academy · Lektion

Data Classes in Collections und als Map-Schlüssel

Verwenden Sie Data Classes in Sets und Maps und nutzen Sie dabei die strukturelle Gleichheit.

Lektion 4 von 413 Schritte

Data Classes in Collections und als Map-Schlüssel 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.

Data Classes als Wertobjekte

Da Data Classes equals und hashCode strukturell überschreiben, funktionieren sie perfekt in Mengen und als Map-Schlüssel – anders als reguläre Klassen.

Reguläre Klasse: ungeeigneter Map-Schlüssel

Eine reguläre Klasse verwendet standardmäßig Referenzgleichheit. Zwei gleich aussehende Objekte sind unterschiedliche Map-Schlüssel.
class Key(val id: Int)  // no equals/hashCode
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)  // same id, different object
map[k1] = "value"
println(map[k2])  // null! k2 != k1 by reference

Data Class: korrekter Map-Schlüssel

Eine Data Class verwendet strukturelle Gleichheit. Zwei Objekte mit denselben Eigenschaften sind gleich.
data class Key(val id: Int)
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)
map[k1] = "value"
println(map[k2])  // "value"! Equal by value

Data Class in einer Menge

Mengen verwenden equals und hashCode, um Duplikate zu entfernen. Data Classes werden dabei korrekt dedupliziert.
data class Tag(val name: String)
val tags = mutableSetOf<Tag>()
tags.add(Tag("kotlin"))
tags.add(Tag("kotlin"))  // duplicate
tags.add(Tag("java"))
println(tags.size)  // 2 (not 3)

GroupBy mit Data Classes

Gruppieren Sie Collections anhand eines Schlüssels vom Typ Data Class.
data class Category(val name: String, val parent: String)
val items = listOf(
    "List" to Category("Collections", "stdlib"),
    "Map" to Category("Collections", "stdlib"),
    "Flow" to Category("Coroutines", "kotlinx")
)
val grouped = items.groupBy { it.second }
println(grouped.keys.size)  // 2

Vorkommen mit einer Map zählen

Zählen Sie Vorkommen strukturierter Daten, indem Sie eine Data Class als Map-Schlüssel verwenden.
data class Pair2(val x: Int, val y: Int)
val points = listOf(Pair2(1,2), Pair2(1,2), Pair2(3,4))
val counts = points.groupingBy { it }.eachCount()
println(counts)  // {Pair2(x=1, y=2)=2, Pair2(x=3, y=4)=1}

Verschachtelte Data Classes

Data Classes können andere Data Classes enthalten. Bei verschachtelten Data Classes arbeiten equals und hashCode auch in der Tiefe korrekt.
data class Address(val city: String, val country: String)
data class Person(val name: String, val address: Address)
val p1 = Person("Alice", Address("Berlin", "DE"))
val p2 = Person("Alice", Address("Berlin", "DE"))
println(p1 == p2)  // true

sortedBy mit Data Classes

Sortieren Sie eine Liste von Data-Class-Instanzen nach einer Eigenschaft.
data class Student(val name: String, val grade: Double)
val students = listOf(
    Student("Bob", 3.2),
    Student("Alice", 3.8),
    Student("Charlie", 2.9)
)
println(students.sortedBy { it.grade })

Data Classes und Caching

Verwenden Sie Data Classes als Cache-Schlüssel in einer HashMap, wenn der Cache-Schlüssel aus mehreren Bestandteilen besteht.
data class CacheKey(val userId: Long, val resourceType: String)
val cache = HashMap<CacheKey, ByteArray>()
val key = CacheKey(42, "avatar")
cache[key] = byteArrayOf(1, 2, 3)
println(cache[CacheKey(42, "avatar")] != null)  // true

distinct bei Data Classes

distinct() verwendet bei einer Liste von Data Classes deren equals-Methode, um Duplikate zu entfernen.
data class Event(val type: String, val ts: Long)
val events = listOf(
    Event("click", 1000),
    Event("click", 1000),  // duplicate
    Event("scroll", 2000)
)
println(events.distinct().size)  // 2

Unveränderliche Schlüssel sind sicherer

Verwenden Sie als Map- oder Set-Schlüssel immer Data Classes mit val-Eigenschaften. Wenn Sie einen Schlüssel nach dem Einfügen verändern, wird die Datenstruktur beschädigt.
data class ImmutableKey(val id: Int)  // val properties only
// DON'T: data class MutableKey(var id: Int)  // changing id breaks map!

Kurze Überprüfung

Warum funktionieren Data Classes korrekt als Map-Schlüssel, reguläre Klassen dagegen oft nicht?

Zusammenfassung

Data Classes funktionieren als Map-Schlüssel und Set-Elemente, weil sie über korrektes strukturelles equals/hashCode verfügen. Verwenden Sie val-Eigenschaften, damit die Schlüssel unveränderlich bleiben. Nutzen Sie groupBy, distinct und sortedBy mit Data Classes für leistungsfähige Abfragen.
Kostenlos starten

Lerne Kotlin mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Data Classes in Collections und als Map-Schlüssel“ kostenlos?

Ja — der vollständige Text von „Data Classes in Collections und als Map-Schlüssel“ 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 „Data Classes in Collections und als Map-Schlüssel“?

Verwenden Sie Data Classes in Sets und Maps und nutzen Sie dabei die strukturelle Gleichheit. 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 „Data Classes in Collections und als Map-Schlüssel“?

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

  1. Grundlagen von Data Classes: automatisch generierte Methoden
  2. Kopieren mit copy() und teilweise Überschreibungen
  3. Destrukturierende Deklarationen mit componentN
  4. Data Classes in Collections und als Map-Schlüssel
← Zurück zu Kotlin Academy