1. Pengantar
Di banyak aplikasi, Anda mungkin telah melihat data ditampilkan sebagai daftar: kontak, setelan, hasil penelusuran, dll.
Namun, dalam kode yang telah Anda tulis sejauh ini, Anda paling sering menangani data yang terdiri dari satu nilai, seperti angka atau potongan teks yang ditampilkan di layar. Untuk membuat aplikasi yang melibatkan jumlah data arbitrer, Anda perlu mempelajari cara menggunakan koleksi.
Jenis koleksi (terkadang disebut struktur data) memungkinkan Anda menyimpan beberapa nilai, biasanya dengan jenis data yang sama, dengan cara yang teratur. Koleksi mungkin berupa daftar yang diurutkan, pengelompokan nilai unik, atau pemetaan nilai dari satu jenis data ke nilai yang lain. Kemampuan untuk menggunakan koleksi secara efektif memungkinkan Anda menerapkan fitur umum aplikasi Android, seperti daftar scroll, serta memecahkan berbagai masalah pemrograman nyata yang melibatkan jumlah data arbitrer.
Codelab ini membahas cara menangani beberapa nilai dalam kode Anda, dan memperkenalkan berbagai struktur data, termasuk array, daftar, set, dan peta.
Prasyarat
- Pemahaman tentang pemrograman berorientasi objek di Kotlin, termasuk class, antarmuka, dan generik.
Yang akan Anda pelajari
- Cara membuat dan mengubah array.
- Cara menggunakan
List
danMutableList
. - Cara menggunakan
Set
danMutableSet
. - Cara menggunakan
Map
danMutableMap
.
Yang akan Anda butuhkan
- Browser web dengan akses ke Kotlin Playground.
2. Array di Kotlin
Apa yang dimaksud dengan array?
Array adalah cara paling sederhana untuk mengelompokkan jumlah nilai arbitrer dalam program Anda.
Seperti pengelompokan panel surya yang disebut array surya, atau bagaimana pembelajaran Kotlin membuka serangkaian kemungkinan untuk karier pemrograman Anda, Array
mewakili lebih dari satu nilai. Secara khusus, array adalah urutan nilai yang semuanya memiliki jenis data yang sama.
- Array berisi beberapa nilai yang disebut elemen, atau terkadang item.
- Elemen dalam array diurutkan dan diakses dengan indeks.
Apa itu indeks? Indeks adalah bilangan bulat yang sesuai dengan elemen dalam array. Indeks memberi tahu jarak item dari elemen awal dalam array. Hal ini disebut pengindeksan nol. Elemen pertama array ada pada indeks 0, elemen kedua ada pada indeks 1, karena merupakan satu tempat dari elemen pertama, dan seterusnya.
Dalam memori perangkat, elemen dalam array disimpan bersebelahan. Meskipun detail yang mendasari berada di luar cakupan codelab ini, hal ini memiliki dua implikasi penting:
- Akses elemen array oleh indeksnya berlangsung cepat. Anda dapat mengakses elemen acak dari suatu array menurut indeksnya dan memperkirakan bahwa akan diperlukan waktu yang sama untuk mengakses elemen acak lainnya. Disebutkan bahwa array tersebut memiliki akses acak.
- Array memiliki ukuran tetap. Ini berarti Anda tidak dapat menambahkan elemen ke array di luar ukuran ini. Mencoba mengakses elemen pada indeks 100 dalam array elemen 100 akan menampilkan pengecualian karena indeks tertinggi adalah 99 (ingat bahwa indeks pertama adalah 0, bukan 1). Namun, Anda dapat mengubah nilai pada indeks di array.
Untuk mendeklarasikan array dalam kode, gunakan fungsi arrayOf()
.
Fungsi arrayOf()
menggunakan elemen array sebagai parameter, dan menampilkan array jenis yang cocok dengan parameter yang diteruskan. Fungsi ini mungkin terlihat sedikit berbeda dari fungsi lain yang telah Anda lihat karena arrayOf()
memiliki jumlah parameter yang bervariasi. Jika Anda meneruskan dua argumen ke arrayOf()
, array yang dihasilkan berisi dua elemen, yang diindeks 0 dan 1. Jika Anda meneruskan tiga argumen, array yang dihasilkan akan memiliki 3 elemen, yang diindeks 0 sampai 2.
Mari kita lihat cara kerja array dengan eksplorasi kecil pada tata surya.
- Buka Kotlin Playground.
- Di
main()
, buat variabelrockPlanets
. PanggilarrayOf()
, yang meneruskan jenisString
, bersama dengan empat string—satu untuk setiap planet batu dalam tata surya.
val rockPlanets = arrayOf<String>("Mercury", "Venus", "Earth", "Mars")
- Karena Kotlin menggunakan inferensi jenis, Anda dapat menghilangkan nama jenis saat memanggil
arrayOf()
. Di bawah variabelrockPlanets
, tambahkan variabel laingasPlanets
, tanpa meneruskan jenis ke dalam tanda kurung sudut.
val gasPlanets = arrayOf("Jupiter", "Saturn", "Uranus", "Neptune")
- Anda dapat melakukan beberapa hal hebat dengan array. Misalnya, seperti jenis numerik
Int
atauDouble
, Anda dapat menambahkan dua array secara bersamaan. Buat variabel baru bernamasolarSystem
, dan tetapkan sama dengan hasilrockPlanets
dangasPlanets
, menggunakan operator plus (+
). Hasilnya adalah array baru yang berisi semua elemen arrayrockPlanets
dan elemen arraygasPlanets
.
val solarSystem = rockPlanets + gasPlanets
- Jalankan program Anda untuk memverifikasi bahwa program ini berfungsi. Anda seharusnya tidak melihat output apa pun.
Mengakses elemen dalam array
Anda dapat mengakses elemen array melalui indeksnya.
Ini disebut sintaksis subskrip. Ini terdiri dari tiga bagian:
- Nama array.
- Tanda kurung siku buka (
[
) dan tutup (]
). - Indeks elemen array dalam tanda kurung siku.
Mari kita akses elemen array solarSystem
berdasarkan indeksnya.
- Di
main()
, akses dan cetak setiap elemen arraysolarSystem
. Perhatikan bagaimana indeks pertama adalah0
dan indeks terakhir adalah7
.
println(solarSystem[0])
println(solarSystem[1])
println(solarSystem[2])
println(solarSystem[3])
println(solarSystem[4])
println(solarSystem[5])
println(solarSystem[6])
println(solarSystem[7])
- Jalankan program Anda. Elemen berada dalam urutan yang sama dengan yang Anda cantumkan saat memanggil
arrayOf()
.
Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune
Anda juga dapat menetapkan nilai elemen array berdasarkan indeksnya.
Mengakses indeks sama seperti sebelumnya—nama array, diikuti oleh tanda kurung siku buka dan tutup yang berisi indeks. Kemudian diikuti oleh operator penugasan (=
) dan nilai baru.
Mari berlatih mengubah nilai pada array solarSystem
.
- Mari beri nama baru untuk Mars bagi para pemukim manusia di masa depan. Akses elemen pada indeks
3
dan tetapkan sama dengan"Little Earth"
.
solarSystem[3] = "Little Earth"
- Cetak elemen pada indeks
3
.
println(solarSystem[3])
- Jalankan program Anda. Elemen keempat array (pada indeks
3
) telah diupdate.
... Little Earth
- Sekarang, anggap para ilmuwan menemukan bahwa ada planet kesembilan di luar Neptunus yang bernama Pluto. Sebelumnya, kami menyebutkan bahwa Anda tidak dapat mengubah ukuran array. Apa yang akan terjadi jika Anda mencoba? Mari coba tambahkan Pluto ke array
solarSystem
. Tambahkan Pluto pada indeks8
karena ini adalah elemen ke-9 dalam array.
solarSystem[8] = "Pluto"
- Jalankan kode. Pengecualian
ArrayIndexOutOfBounds
akan ditampilkan. Karena array sudah memiliki 8 elemen, seperti yang diharapkan, Anda tidak dapat langsung menambahkan elemen kesembilan.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
- Hapus penambahan Pluto ke array.
Kode yang akan dihapus
solarSystem[8] = "Pluto"
- Jika ingin membuat array lebih besar dari yang sudah ada, Anda harus membuat array baru. Tentukan variabel baru bernama
newSolarSystem
seperti yang ditunjukkan. Array ini dapat menyimpan sembilan elemen, bukan delapan.
val newSolarSystem = arrayOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto")
- Sekarang coba cetak elemen pada indeks
8
.
println(newSolarSystem[8])
- Jalankan kode Anda dan amati bahwa kode berjalan tanpa pengecualian.
... Pluto
Bagus. Dengan pengetahuan Anda tentang array, Anda dapat melakukan hampir semua hal dengan koleksi.
Namun, tidak semudah itu. Meskipun array adalah salah satu aspek dasar pemrograman, menggunakan array untuk tugas yang memerlukan penambahan dan penghapusan elemen, keunikan dalam koleksi, atau pemetaan objek ke objek lain tidak sederhana atau mudah, dan kode aplikasi Anda akan dengan cepat menjadi berantakan.
Oleh karena itu, sebagian besar bahasa pemrograman, termasuk Kotlin, mengimplementasikan jenis koleksi khusus untuk menangani situasi yang umum terjadi di aplikasi nyata. Di bagian berikut, Anda akan mempelajari tiga koleksi umum: List
, Set
, dan Map
. Anda juga akan mempelajari properti dan metode umum, serta situasi yang tepat untuk menggunakan jenis koleksi ini.
3. Daftar
Daftar adalah koleksi yang diurutkan dan dapat diubah ukurannya, biasanya diterapkan sebagai array yang dapat diubah ukurannya. Saat array diisi sesuai kapasitas dan Anda mencoba menyisipkan elemen baru, array tersebut akan disalin ke array baru yang lebih besar.
Dengan daftar, Anda juga dapat menyisipkan elemen baru di antara elemen lainnya pada indeks tertentu.
Ini adalah cara daftar dapat menambahkan dan menghapus elemen. Pada umumnya, diperlukan waktu yang sama untuk menambahkan elemen apa pun ke dalam daftar, terlepas dari berapa banyak elemen yang ada dalam daftar. Terkadang, jika menambahkan elemen baru akan menempatkan array di atas ukuran yang ditentukan, elemen array mungkin harus dipindahkan untuk menyediakan ruang bagi elemen baru. Daftar melakukan semua hal ini untuk Anda, tetapi di balik semuanya, daftar hanyalah array yang ditukar dengan array baru saat diperlukan.
List
dan MutableList
Jenis koleksi yang akan Anda temui di Kotlin mengimplementasikan satu atau beberapa antarmuka. Seperti yang telah Anda pelajari di codelab Generik, objek, dan ekstensi sebelumnya di unit ini, antarmuka memberikan kumpulan properti dan metode standar untuk diterapkan oleh class. Class yang menerapkan antarmuka List
menyediakan implementasi untuk semua properti dan metode antarmuka List
. Hal yang sama berlaku untuk MutableList
.
Jadi, apa fungsi List
dan MutableList
?
List
adalah antarmuka yang menentukan properti dan metode terkait koleksi item hanya baca yang diurutkan.MutableList
memperluas antarmukaList
dengan menentukan metode untuk mengubah daftar, seperti menambahkan dan menghapus elemen.
Antarmuka ini hanya menentukan properti dan metode List
dan/atau MutableList
. Penentuan cara setiap properti dan metode diterapkan bergantung pada class yang memperluasnya. Implementasi berbasis array yang dijelaskan di atas adalah yang paling sering Anda gunakan, jika tidak selalu, tetapi Kotlin mengizinkan class lain untuk memperluas List
dan MutableList
.
Fungsi listOf()
Seperti arrayOf()
, fungsi listOf()
mengambil item sebagai parameter, tetapi menampilkan List
, bukan array.
- Hapus kode yang ada dari
main()
. - Dalam
main()
, buatList
planet yang bernamasolarSystem
dengan memanggillistOf()
.
fun main() {
val solarSystem = listOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
}
List
memiliki propertisize
untuk mendapatkan jumlah elemen dalam daftar. Cetaksize
dari daftarsolarSystem
.
println(solarSystem.size)
- Jalankan kode. Ukuran daftar seharusnya 8.
8
Mengakses elemen dari daftar
Seperti array, Anda dapat mengakses elemen pada indeks tertentu dari List
menggunakan sintaksis subskrip. Anda dapat melakukan hal yang sama menggunakan metode get()
. Sintaksis subskrip dan metode get()
menggunakan Int
sebagai parameter dan menampilkan elemen pada indeks tersebut. Seperti Array
, ArrayList
diindeks nol, jadi misalnya, elemen keempat akan berada di indeks 3
.
- Cetak planet pada indeks
2
menggunakan sintaksis subskrip.
println(solarSystem[2])
- Cetak elemen pada indeks
3
dengan memanggilget()
pada daftarsolarSystem
.
println(solarSystem.get(3))
- Jalankan kode. Elemen pada indeks
2
adalah"Earth"
dan elemen pada indeks3
adalah"Mars"
.
... Earth Mars
Selain mendapatkan elemen berdasarkan indeksnya, Anda juga dapat menelusuri indeks elemen tertentu menggunakan metode indexOf()
. Metode indexOf()
menelusuri daftar untuk elemen tertentu (diteruskan sebagai argumen), dan menampilkan indeks kejadian pertama dari elemen tersebut. Jika tidak muncul dalam daftar, elemen akan menampilkan -1
.
- Cetak hasil panggilan
indexOf()
di daftarsolarSystem
, yang meneruskan"Earth"
.
println(solarSystem.indexOf("Earth"))
- Panggil
indexOf()
, yang meneruskan"Pluto"
, dan cetak hasilnya.
println(solarSystem.indexOf("Pluto"))
- Jalankan kode. Elemen cocok dengan
"Earth"
, sehingga indeks,2
, akan dicetak. Tidak ada elemen yang cocok dengan"Pluto"
, sehingga-1
akan dicetak.
... 2 -1
Lakukan iterasi pada elemen daftar menggunakan loop for
Saat mempelajari jenis fungsi dan ekspresi lambda, Anda telah melihat cara menggunakan fungsi repeat()
untuk mengeksekusi kode beberapa kali.
Tugas umum dalam pemrograman adalah melakukan tugas satu kali untuk setiap elemen dalam daftar. Kotlin menyertakan fitur yang disebut loop for
untuk melakukannya dengan sintaksis yang ringkas dan dapat dibaca. Anda akan sering melihat hal ini disebut sebagai looping melalui daftar atau iterasi melalui daftar.
Untuk melakukan loop pada daftar, gunakan kata kunci for
, yang diikuti dengan sepasang tanda kurung buka dan tutup. Dalam tanda kurung, sertakan nama variabel, diikuti dengan kata kunci in
, diikuti dengan nama koleksi. Setelah tanda kurung tutup, sepasang tanda kurung kurawal buka dan tutup akan ditampilkan, tempat Anda menyertakan kode yang ingin dieksekusi untuk setiap elemen dalam koleksi. Ini dikenal sebagai isi loop. Setiap eksekusi kode ini dikenal sebagai iterasi.
Variabel sebelum kata kunci in
tidak dideklarasikan dengan val
atau var
sehingga diasumsikan sebagai get-only. Anda dapat memberinya nama apa pun. Jika daftar diberi nama jamak, seperti planets
, nama variabel biasanya bentuk tunggal, seperti planet
. Nama variabel item
atau element
juga umum digunakan.
Nama ini akan digunakan sebagai variabel sementara yang sesuai dengan elemen saat ini dalam koleksi—elemen pada indeks 0
untuk iterasi pertama, elemen pada indeks 1
untuk iterasi kedua, dan seterusnya, serta dapat diakses dalam kurung kurawal.
Untuk melihat cara kerjanya, Anda akan mencetak setiap nama planet di baris yang terpisah menggunakan loop for
.
- Di
main()
, di bawah panggilan terbaru keprintln()
, tambahkan loopfor
. Dalam tanda kurung, beri nama variabelplanet
, dan lakukan loop melalui daftarsolarSystem
.
for (planet in solarSystem) {
}
- Dalam tanda kurung kurawal, cetak nilai
planet
menggunakanprintln()
.
for (planet in solarSystem) {
println(planet)
}
- Jalankan kode. Kode dalam isi loop dieksekusi untuk setiap item dalam koleksi.
... Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune
Menambahkan elemen ke daftar
Kemampuan untuk menambahkan, menghapus, dan mengupdate elemen dalam suatu koleksi bersifat eksklusif untuk class yang mengimplementasikan antarmuka MutableList
. Jika melacak planet yang baru ditemukan, Anda mungkin menginginkan kemampuan untuk sering menambahkan elemen ke daftar. Anda harus secara khusus memanggil fungsi mutableListOf()
, bukan listOf()
, saat membuat daftar yang ingin Anda tambahkan dan hapus elemennya.
Ada dua versi fungsi add()
:
- Fungsi
add()
pertama memiliki satu parameter jenis elemen dalam daftar dan menambahkannya ke akhir daftar. - Versi lain dari
add()
memiliki dua parameter. Parameter pertama sesuai dengan indeks tempat elemen baru harus dimasukkan. Parameter kedua adalah elemen yang ditambahkan ke daftar.
Mari kita lihat bagaimana penerapan keduanya.
- Ubah inisialisasi
solarSystem
agar memanggilmutableListOf()
, bukanlistOf()
. Sekarang Anda dapat memanggil metode yang ditentukan diMutableList
.
val solarSystem = mutableListOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
- Sekali lagi, kita mungkin ingin mengklasifikasikan Pluto sebagai planet. Panggil metode
add()
disolarSystem
, dengan meneruskan"Pluto"
sebagai argumen tunggal.
solarSystem.add("Pluto")
- Beberapa ilmuwan memiliki teori bahwa sebuah planet bernama Theia ada sebelum menabrak Bumi dan membentuk Bulan. Sisipkan
"Theia"
dengan indeks3
, antara"Earth"
dan"Mars"
.
solarSystem.add(3, "Theia")
Mengupdate elemen pada indeks tertentu
Anda dapat mengupdate elemen yang ada dengan sintaksis subskrip:
- Update nilai pada indeks
3
menjadi"Future Moon"
.
solarSystem[3] = "Future Moon"
- Cetak nilai pada indeks
3
dan9
menggunakan sintaksis subskrip.
println(solarSystem[3])
println(solarSystem[9])
- Jalankan kode untuk memverifikasi output.
Future Moon Pluto
Menghapus elemen dari daftar
Elemen dihapus menggunakan metode remove()
atau removeAt()
. Anda dapat menghapus elemen dengan meneruskannya ke metode remove()
atau dengan indeksnya menggunakan removeAt()
.
Mari kita lihat kedua metode untuk menghapus elemen yang sedang bekerja.
- Panggil
removeAt()
padasolarSystem
, yang meneruskan9
untuk indeks. Tindakan ini akan menghapus"Pluto"
dari daftar.
solarSystem.removeAt(9)
- Panggil
remove()
padasolarSystem
, yang meneruskan"Future Moon"
sebagai elemen yang akan dihapus. Tindakan ini akan menelusuri daftar, dan jika ditemukan elemen yang cocok, elemen tersebut akan dihapus.
solarSystem.remove("Future Moon")
List
menyediakan metodecontains()
yang menampilkanBoolean
jika elemen ada dalam daftar. Cetak hasil panggilancontains()
untuk"Pluto"
.
println(solarSystem.contains("Pluto"))
- Untuk sintaksis yang lebih ringkas, Anda dapat menggunakan operator
in
. Anda dapat memeriksa apakah suatu elemen berada dalam daftar menggunakan elemen, operatorin
, dan koleksi. Gunakan operatorin
untuk memeriksa apakahsolarSystem
berisi"Future Moon"
.
println("Future Moon" in solarSystem)
- Jalankan kode. Kedua pernyataan harus mencetak
false
.
... false false
4. Set
Set adalah koleksi yang tidak memiliki urutan tertentu dan tidak mengizinkan nilai duplikat.
Bagaimana koleksi bisa seperti ini? Rahasianya adalah kode hash. Kode hash adalah Int
yang dihasilkan oleh metode hashCode()
dari class Kotlin mana pun. Kode ini dapat dianggap sebagai ID semi-unik untuk objek Kotlin. Perubahan kecil pada objek, seperti menambahkan satu karakter ke String
, akan menghasilkan nilai hash yang sangat berbeda. Meskipun dua objek dapat memiliki kode hash yang sama (disebut tabrakan hash), fungsi hashCode()
memastikan beberapa tingkat keunikan, yang sering kali dua nilai berbeda masing-masing memiliki kode hash yang unik.
Set memiliki dua properti penting:
- Menelusuri elemen tertentu dalam suatu set dapat dilakukan dengan cepat—dibandingkan dengan daftar—terutama untuk koleksi besar. Meskipun
indexOf()
dariList
memerlukan pemeriksaan setiap elemen dari awal hingga kecocokan ditemukan, rata-rata diperlukan waktu yang sama untuk memeriksa apakah elemen berada dalam set atau tidak, apakah itu elemen pertama atau yang keseratus ribu. - Set cenderung menggunakan lebih banyak memori daripada daftar untuk jumlah data yang sama, karena indeks array lebih sering diperlukan dibandingkan dengan data dalam set.
Manfaat set adalah memastikan keunikan. Jika Anda menulis program untuk melacak planet yang baru ditemukan, set menyediakan cara mudah untuk memeriksa apakah planet telah ditemukan. Dengan data dalam jumlah besar, biasanya lebih disarankan untuk memeriksa apakah elemen ada dalam daftar, yang mengharuskan iterasi pada semua elemen.
Seperti List
dan MutableList
, ada Set
dan MutableSet
. MutableSet
mengimplementasikan Set
, sehingga class apa pun yang mengimplementasikan MutableSet
harus mengimplementasikan keduanya.
Menggunakan MutableSet
di Kotlin
Kita akan menggunakan MutableSet
dalam contoh ini untuk menunjukkan cara menambahkan dan menghapus elemen.
- Hapus kode yang ada dari
main()
. - Buat
Set
planet yang disebutsolarSystem
menggunakanmutableSetOf()
. Tindakan ini akan menampilkanMutableSet
, yang implementasi defaultnya adalahLinkedHashSet()
.
val solarSystem = mutableSetOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
- Cetak ukuran set menggunakan properti
size
.
println(solarSystem.size)
- Seperti
MutableList
,MutableSet
memiliki metodeadd()
. Tambahkan"Pluto"
ke setsolarSystem
menggunakan metodeadd()
. Hanya dibutuhkan satu parameter untuk elemen yang ditambahkan. Elemen dalam set tidak harus memiliki urutan, jadi tidak ada indeks.
solarSystem.add("Pluto")
- Cetak
size
set setelah menambahkan elemen.
println(solarSystem.size)
- Fungsi
contains()
mengambil satu parameter dan memeriksa apakah elemen yang ditentukan terdapat dalam set. Jika ya, nilai benar (true) akan ditampilkan. Jika tidak, nilai salah (false) akan ditampilkan. Panggilcontains()
untuk memeriksa apakah"Pluto"
ada disolarSystem
.
println(solarSystem.contains("Pluto"))
- Jalankan kode. Ukuran telah bertambah dan
contains()
sekarang menampilkantrue
.
8 9 true
- Seperti yang disebutkan sebelumnya, set tidak boleh berisi duplikat. Coba tambahkan kembali
"Pluto"
.
solarSystem.add("Pluto")
- Cetak kembali ukuran set.
println(solarSystem.size)
- Jalankan lagi kode.
"Pluto"
tidak ditambahkan karena sudah ada dalam set. Ukuran seharusnya tidak bertambah kali ini.
... 9
Fungsi remove()
mengambil satu parameter dan menghapus elemen yang ditentukan dari set.
- Gunakan fungsi
remove()
untuk menghapus"Pluto"
.
solarSystem.remove("Pluto")
- Cetak ukuran koleksi dan panggil
contains()
lagi untuk memeriksa apakah"Pluto"
masih berada dalam set.
println(solarSystem.size)
println(solarSystem.contains("Pluto"))
- Jalankan kode.
"Pluto"
tidak lagi ada dalam set dan sekarang ukurannya menjadi 8.
... 8 false
5. Koleksi peta
Map
adalah koleksi yang terdiri dari kunci dan nilai. Disebut peta karena kunci unik dipetakan ke nilai lain. Kunci dan nilai yang menyertainya sering disebut key-value pair
.
Kunci peta bersifat unik. Namun, nilai peta tidak demikian. Dua kunci yang berbeda dapat dipetakan ke nilai yang sama. Misalnya, "Mercury"
memiliki 0
bulan, dan "Venus"
memiliki 0
bulan.
Mengakses nilai dari peta berdasarkan kuncinya biasanya lebih cepat daripada menelusuri daftar besar, seperti dengan indexOf()
.
Peta dapat dideklarasikan menggunakan fungsi mapOf()
atau mutableMapOf()
. Peta memerlukan dua jenis generik yang dipisahkan koma—satu untuk kunci dan satu lagi untuk nilai.
Peta juga dapat menggunakan inferensi jenis jika memiliki nilai awal. Untuk mengisi peta dengan nilai awal, setiap pasangan nilai kunci terdiri dari kunci, diikuti dengan operator to
, yang diikuti dengan nilai. Setiap pasangan dipisahkan oleh koma.
Mari kita pelajari lebih lanjut cara menggunakan peta, serta beberapa properti dan metode yang berguna.
- Hapus kode yang ada dari
main()
. - Buat peta bernama
solarSystem
menggunakanmutableMapOf()
dengan nilai awal seperti yang ditunjukkan.
val solarSystem = mutableMapOf(
"Mercury" to 0,
"Venus" to 0,
"Earth" to 1,
"Mars" to 2,
"Jupiter" to 79,
"Saturn" to 82,
"Uranus" to 27,
"Neptune" to 14
)
- Seperti daftar dan set,
Map
menyediakan propertisize
, yang berisi jumlah pasangan nilai kunci. Cetak ukuran petasolarSystem
.
println(solarSystem.size)
- Anda dapat menggunakan sintaksis subskrip untuk menetapkan pasangan nilai kunci tambahan. Tetapkan kunci
"Pluto"
ke nilai5
.
solarSystem["Pluto"] = 5
- Cetak kembali ukuran, setelah menyisipkan elemen.
println(solarSystem.size)
- Anda dapat menggunakan sintaksis subskrip untuk mendapatkan nilai. Cetak jumlah bulan untuk kunci
"Pluto"
.
println(solarSystem["Pluto"])
- Anda juga dapat mengakses nilai dengan metode
get()
. Baik Anda menggunakan sintaksis subskrip atau memanggilget()
, mungkin kunci yang Anda teruskan tidak ada dalam peta. Jika tidak ada pasangan nilai kunci, nilai akan menampilkan null. Cetak jumlah bulan untuk"Theia"
.
println(solarSystem.get("Theia"))
- Jalankan kode. Jumlah bulan untuk Pluto akan dicetak. Namun, karena Theia tidak ada di peta, memanggil
get()
akan menampilkan null.
8 9 5 null
Metode remove()
menghapus pasangan nilai kunci dengan kunci yang ditentukan. Nilai yang dihapus atau null
juga akan ditampilkan jika kunci yang ditentukan tidak ada di peta.
- Cetak hasil dari panggilan
remove()
dan teruskan di"Pluto"
.
solarSystem.remove("Pluto")
- Untuk memverifikasi bahwa item tersebut telah dihapus, cetak kembali ukurannya.
println(solarSystem.size)
- Jalankan kode. Ukuran peta adalah 8 setelah menghapus entri.
... 8
- Sintaksis subskrip, atau metode
put()
, juga dapat mengubah nilai untuk kunci yang sudah ada. Gunakan sintaksis subskrip untuk memperbarui jumlah bulan Jupiter menjadi 78 dan cetak nilai baru.
solarSystem["Jupiter"] = 78
println(solarSystem["Jupiter"])
- Jalankan kode. Nilai untuk kunci yang ada,
"Jupiter"
, diupdate.
... 78
6. Kesimpulan
Selamat! Anda telah mempelajari salah satu jenis data yang paling mendasar dalam pemrograman, array, dan beberapa jenis koleksi data praktis yang dibuat dari array, termasuk List
, Set
, dan Map
. Jenis koleksi ini memungkinkan Anda mengelompokkan dan mengatur nilai dalam kode. Array dan daftar menyediakan akses cepat ke elemen berdasarkan indeksnya, sedangkan set dan peta menggunakan kode hash untuk mempermudah menemukan elemen dalam koleksi. Anda akan melihat jenis koleksi ini sering digunakan di aplikasi mendatang, dan mengetahui cara menggunakannya akan menguntungkan Anda dalam karier pemrograman di masa mendatang.
Ringkasan
- Array menyimpan data yang diurutkan dengan jenis yang sama dan memiliki ukuran tetap.
- Array digunakan untuk mengimplementasikan banyak jenis koleksi lainnya.
- Daftar adalah koleksi yang diurutkan dan dapat diubah ukurannya.
- Set adalah koleksi yang tidak berurutan dan tidak boleh berisi duplikat.
- Cara kerja peta mirip dengan set dan penyimpanan pasangan kunci dan nilai dari jenis yang ditentukan.