0Pricing
Kotlin Academy · Lección

Clases de datos en colecciones y como claves de mapas

Use clases de datos en conjuntos y mapas aprovechando la igualdad estructural.

Clases de datos en colecciones y como claves de mapas es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

Clases de datos como objetos de valor

Como las clases de datos redefinen estructuralmente equals y hashCode, funcionan perfectamente en conjuntos y como claves de mapas, a diferencia de las clases normales.

Clase normal: una mala clave de mapa

Una clase normal utiliza la igualdad por referencia de forma predeterminada. Dos objetos de aspecto idéntico son claves de mapa distintas.
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

Clase de datos: una clave de mapa correcta

Una clase de datos utiliza la igualdad estructural. Dos objetos con las mismas propiedades son iguales.
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

Clase de datos en un conjunto

Los conjuntos utilizan equals y hashCode para eliminar duplicados. Las clases de datos eliminan los duplicados correctamente.
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 clases de datos

Agrupe colecciones mediante una clave de clase de datos.
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

Contar apariciones con un mapa

Cuente las apariciones de datos estructurados utilizando una clase de datos como clave del mapa.
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}

Clases de datos anidadas

Las clases de datos pueden contener otras clases de datos. En las clases de datos anidadas, equals y hashCode se calculan profundamente.
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 clases de datos

Ordene una lista de instancias de clases de datos por una propiedad.
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 })

Clases de datos y almacenamiento en caché

Utilice clases de datos como claves de caché en un HashMap cuando la clave de caché sea compuesta.
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 en clases de datos

distinct() aplicado a una lista de clases de datos utiliza su equals para eliminar duplicados.
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

Las claves inmutables son más seguras

Utilice siempre clases de datos con propiedades val como claves de mapas o conjuntos. Mutar una clave después de insertarla daña la estructura de datos.
data class ImmutableKey(val id: Int)  // val properties only
// DON'T: data class MutableKey(var id: Int)  // changing id breaks map!

Comprobación rápida

¿Por qué las clases de datos funcionan correctamente como claves de Map mientras que las clases normales a menudo no?

Resumen

Las clases de datos funcionan como claves de Map y elementos de Set porque tienen implementaciones estructurales correctas de equals y hashCode. Utilice propiedades val para mantener las claves inmutables. Aproveche groupBy, distinct y sortedBy con clases de datos para realizar consultas eficaces.

Preguntas frecuentes

¿La lección «Clases de datos en colecciones y como claves de mapas» es gratis?

Sí — el texto completo de «Clases de datos en colecciones y como claves de mapas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Clases de datos en colecciones y como claves de mapas»?

Use clases de datos en conjuntos y mapas aprovechando la igualdad estructural. Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Clases de datos en colecciones y como claves de mapas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Fundamentos de las clases de datos: métodos generados automáticamente
  2. Copiar con copy() y sobrescrituras parciales
  3. Declaraciones de desestructuración con componentN
  4. Clases de datos en colecciones y como claves de mapas
← Volver a Kotlin Academy