Kotlin Academy · Ders

Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları

Yapısal eşitlikten yararlanarak data sınıflarını kümelerde ve eşlemelerde kullanın.

4. ders / 413 adım

Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Değer Nesnesi Olarak Veri Sınıfları

Veri sınıfları equals ve hashCode işlevlerini yapısal olarak geçersiz kıldığı için kümelerde ve eşleme anahtarları olarak mükemmel çalışır; normal sınıflar için durum böyle değildir.

Normal Sınıf: Hatalı Eşleme Anahtarı

Normal bir sınıf, varsayılan olarak başvuru eşitliğini kullanır. Aynı görünen iki nesne farklı eşleme anahtarlarıdır.
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

Veri Sınıfı: Doğru Eşleme Anahtarı

Veri sınıfı yapısal eşitliği kullanır. Aynı özelliklere sahip iki nesne eşittir.
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

Kümede Veri Sınıfı

Kümeler, yinelenenleri kaldırmak için equals ve hashCode kullanır. Veri sınıfları yinelemeleri doğru şekilde kaldırır.
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)

Veri Sınıflarıyla GroupBy

Koleksiyonları bir veri sınıfı anahtarına göre gruplayın.
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

Eşlemeyle Oluşumları Sayma

Veri sınıfını eşleme anahtarı olarak kullanarak yapılandırılmış verilerin oluşumlarını sayın.
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}

İç İçe Veri Sınıfları

Veri sınıfları başka veri sınıfları içerebilir. İç içe veri sınıfları için Equals ve hashCode derinlemesine çalışır.
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

Veri Sınıflarıyla sortedBy

Bir veri sınıfı örnekleri listesini bir özelliğe göre sıralayın.
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 })

Veri Sınıfları ve Önbelleğe Alma

Önbellek anahtarı birleşik olduğunda veri sınıflarını bir HashMap'te önbellek anahtarı olarak kullanın.
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

Veri Sınıflarında distinct

Bir veri sınıfları listesinde distinct(), yinelenenleri kaldırmak için sınıfların equals işlevini kullanır.
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

Değişmez Anahtarlar Daha Güvenlidir

Eşleme veya küme anahtarları olarak her zaman val özelliklerine sahip veri sınıflarını kullanın. Bir anahtarı ekledikten sonra değiştirmek veri yapısını bozar.
data class ImmutableKey(val id: Int)  // val properties only
// DON'T: data class MutableKey(var id: Int)  // changing id breaks map!

Hızlı Kontrol

Veri sınıfları eşleme anahtarları olarak doğru çalışırken normal sınıflar neden çoğu zaman doğru çalışmaz?

Özet

Veri sınıfları, doğru yapısal equals/hashCode işlevlerine sahip oldukları için eşleme anahtarları ve küme öğeleri olarak çalışır. Anahtarları değişmez tutmak için val özellikleri kullanın. Güçlü sorgular için veri sınıflarıyla groupBy, distinct ve sortedBy işlevlerinden yararlanın.
Başlamak ücretsiz

Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları” dersi ücretsiz mi?

Evet — “Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları” dersinde ne öğreneceğim?

Yapısal eşitlikten yararlanarak data sınıflarını kümelerde ve eşlemelerde kullanın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Data Sınıfı Temelleri: Otomatik Oluşturulan Yöntemler
  2. copy() ve Kısmi Geçersiz Kılmalarla Kopyalama
  3. componentN ile Yapı Bozma Bildirimleri
  4. Koleksiyonlarda ve Map Anahtarları Olarak Data Sınıfları
← Kotlin Academy Sayfasına Dön