0Pricing
Kotlin Academy · Lezione

Data class nelle collezioni e come chiavi di map

Utilizzi le data class in set e map sfruttando l'uguaglianza strutturale.

Data class nelle collezioni e come chiavi di map è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Le data class come oggetti valore

Poiché le data class sovrascrivono equals e hashCode in modo strutturale, funzionano perfettamente nei set e come chiavi delle mappe, a differenza delle classi normali.

Classe normale: chiave di mappa errata

Una classe normale usa per impostazione predefinita l'uguaglianza per riferimento. Due oggetti dall'aspetto identico sono chiavi di mappa diverse.
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: chiave di mappa corretta

Una data class usa l'uguaglianza strutturale. Due oggetti con le stesse proprietà sono uguali.
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 un Set

I set usano equals e hashCode per eliminare i duplicati. Le data class eliminano correttamente i duplicati.
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 con le data class

Raggruppi le collezioni usando una data class come chiave.
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

Contare le occorrenze con Map

Conti le occorrenze di dati strutturati usando una data class come chiave di una Map.
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}

Data class annidate

Le data class possono contenere altre data class. Per le data class annidate, equals e hashCode operano in profondità.
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 con le data class

Ordini un elenco di istanze di data class in base a una proprietà.
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 class e caching

Usi le data class come chiavi della cache in una HashMap quando la chiave della cache è composta.
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 sulle data class

distinct() su un elenco di data class usa il loro equals per rimuovere i duplicati.
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

Le chiavi immutabili sono più sicure

Usi sempre data class con proprietà val come chiavi di mappe e set. Modificare una chiave dopo l'inserimento danneggia la struttura dati.
data class ImmutableKey(val id: Int)  // val properties only
// DON'T: data class MutableKey(var id: Int)  // changing id breaks map!

Verifica rapida

Perché le data class funzionano correttamente come chiavi di una Map mentre spesso le classi normali non lo fanno?

Riepilogo

Le data class funzionano come chiavi di Map e come elementi di Set perché hanno equals/hashCode strutturali corretti. Usi proprietà val per mantenere immutabili le chiavi. Sfrutti groupBy, distinct e sortedBy con le data class per eseguire query avanzate.

Domande Frequenti

La lezione «Data class nelle collezioni e come chiavi di map» è gratuita?

Sì — il testo completo di «Data class nelle collezioni e come chiavi di map» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «Data class nelle collezioni e come chiavi di map»?

Utilizzi le data class in set e map sfruttando l'uguaglianza strutturale. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Data class nelle collezioni e come chiavi di map»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi delle data class: metodi generati automaticamente
  2. Copiare con copy() e override parziali
  3. Dichiarazioni destrutturate con componentN
  4. Data class nelle collezioni e come chiavi di map
← Torna a Kotlin Academy