Masukkan Password
49 Kotlin Tutorials for Beginners #48 - Sorting Elements of Array/List
Materi kali ini masih berada di bagian modifying List, dan fokusnya adalah mengubah/update elemen yang sudah ada, lalu dilanjutkan dengan sorting.
Kalau materi sebelumnya kita sudah belajar:
add() → menambah
add(index) → menyisipkan
remove() → menghapus berdasarkan nilai
removeAt() → menghapus berdasarkan index
Sekarang kita tambahkan:
list[index] = value → mengubah/update elemen
sort() → mengurutkan elemen
1. Apa maksud “update element”?
Update artinya kita mengganti nilai yang sudah ada dengan nilai baru.
Misalnya kita punya:
val names = mutableListOf(
"Ali",
"Muhammad",
"Jack",
"Perla"
)
Posisinya:
Index: 0 1 2 3
↓ ↓ ↓ ↓
[ Ali, Muhammad, Jack, Perla ]
Kita ingin mengganti:
Perla → Pamela
Tanpa menghapus elemen terlebih dahulu.
Caranya sangat sederhana:
names[3] = "Pamela"
Hasil:
[Ali, Muhammad, Jack, Pamela]
Jadi konsep utamanya:
Untuk meng-update elemen pada
List, gunakanlist[index] = nilaiBaru.
2. Kenapa tidak menggunakan add()?
Ini penting karena sekilas mungkin terlihat sama-sama memasukkan nilai.
Misalnya:
names.add("Pamela")
Ini bukan update.
Ini berarti:
Tambahkan
"Pamela"sebagai elemen baru.
Misalnya awalnya:
[Ali, Muhammad, Jack, Perla]
Setelah:
names.add("Pamela")
menjadi:
[Ali, Muhammad, Jack, Perla, Pamela]
Jumlah elemen bertambah:
4 → 5
Sedangkan:
names[3] = "Pamela"
berarti:
Ganti elemen yang sekarang berada di index
3.
Hasil:
[Ali, Muhammad, Jack, Pamela]
Jumlah elemen:
4 → 4
Tidak bertambah.
3. Analogi sederhananya
Bayangkan List seperti deretan loker:
┌─────┬────────┬──────┬───────┐
│ Ali │Muhammad│ Jack │ Perla │
└─────┴────────┴──────┴───────┘
0 1 2 3
Kalau kita ingin mengganti isi loker nomor 3:
names[3] = "Pamela"
Maka:
┌─────┬────────┬──────┬────────┐
│ Ali │Muhammad│ Jack │ Pamela │
└─────┴────────┴──────┴────────┘
0 1 2 3
Kita tidak menambah loker baru.
Kita hanya mengganti isi loker yang sudah ada.
4. Update menggunakan index
Bentuk umumnya:
list[index] = nilaiBaru
Contoh:
val names = mutableListOf(
"Ali",
"Muhammad",
"Jack",
"Perla"
)
names[3] = "Pamela"
println(names)
Output:
[Ali, Muhammad, Jack, Pamela]
5. Ingat: index dimulai dari 0
Ini sangat penting.
Misalnya:
val names = mutableListOf(
"Ali",
"Muhammad",
"Jack",
"Perla"
)
Maka:
Index: 0 1 2 3
↓ ↓ ↓ ↓
[ Ali, Muhammad, Jack, Perla ]
Jadi:
names[0] = "Budi"
mengubah:
Ali → Budi
Hasil:
[Budi, Muhammad, Jack, Perla]
Sedangkan:
names[2] = "Citra"
mengubah:
Jack → Citra
Hasil:
[Ali, Muhammad, Citra, Perla]
6. Update berbeda dengan Insert
Ini salah satu hal yang sering membuat pemula bingung.
Bandingkan:
Update
names[2] = "Citra"
Artinya:
Ganti elemen index
2.
Sebelum:
[Ali, Muhammad, Jack, Perla]
↑
index 2
Sesudah:
[Ali, Muhammad, Citra, Perla]
Jumlah tetap 4.
Insert
names.add(2, "Citra")
Artinya:
Masukkan
"Citra"ke index2.
Sebelum:
[Ali, Muhammad, Jack, Perla]
Sesudah:
[Ali, Muhammad, Citra, Jack, Perla]
Jumlah menjadi 5.
Perhatikan bahwa Jack tidak diganti. Dia didorong ke kanan.
7. Tiga operasi yang sangat penting
Coba bandingkan tiga kode berikut:
names.add("Pamela")
names.add(2, "Pamela")
names[2] = "Pamela"
Maknanya:
| Kode | Arti | Jumlah elemen |
|---|---|---|
add("Pamela") | Tambah di akhir | Bertambah |
add(2, "Pamela") | Insert di index 2 | Bertambah |
names[2] = "Pamela" | Update index 2 | Tetap |
Cara mengingatnya:
add() → TAMBAH
add(index, value) → SISIPKAN
[index] = value → GANTI
8. Hati-hati dengan index di luar batas
Ini bagian yang sangat penting dari video.
Misalnya kita memiliki:
val names = mutableListOf(
"Ali",
"Muhammad",
"Jack",
"Perla",
"Sarah"
)
Jumlah elemennya:
size = 5
Index yang tersedia:
0 1 2 3 4
↓ ↓ ↓ ↓ ↓
Ali Muh Jack Perla Sarah
Index terakhir adalah:
size - 1
= 5 - 1
= 4
Jadi index yang valid hanya:
0, 1, 2, 3, 4
9. Kalau menggunakan index 12?
Misalnya:
names[12] = "Pamela"
Ini akan menghasilkan error.
Kenapa?
Karena tidak ada index 12.
List kita hanya memiliki:
Index 0
Index 1
Index 2
Index 3
Index 4
Tidak ada:
Index 12
Maka Kotlin akan memberikan error seperti:
IndexOutOfBoundsException
Intinya:
Kamu mencoba mengakses posisi yang tidak tersedia.
10. Kenapa error-nya “out of bounds”?
bounds bisa dibayangkan sebagai batas wilayah yang tersedia.
Misalnya:
List:
[Ali, Muhammad, Jack, Perla, Sarah]
↑ ↑
0 4
Batas index:
0 sampai 4
Kalau kamu meminta:
names[12]
kamu keluar dari batas tersebut.
Makanya disebut:
IndexOutOfBoundsException
11. Cara aman sebelum update
Kalau index berasal dari input pengguna atau data yang belum kita pastikan, kita perlu berhati-hati.
Misalnya:
val index = 2
if (index in names.indices) {
names[index] = "Pamela"
}
names.indices memberikan kumpulan index yang valid.
Untuk:
[Ali, Muhammad, Jack, Perla, Sarah]
names.indices adalah:
0..4
Jadi:
index in names.indices
akan mengecek apakah index tersebut valid.
12. Hubungan dengan materi in sebelumnya
Kita sebelumnya sudah belajar:
"Jack" in names
Artinya:
Apakah
"Jack"ada di dalam List?
Sekarang:
index in names.indices
Artinya:
Apakah index tersebut termasuk dalam daftar index yang valid?
Contohnya:
val names = mutableListOf("Ali", "Budi", "Citra")
Index valid:
0, 1, 2
Maka:
1 in names.indices
→ true
Sedangkan:
5 in names.indices
→ false
13. Sekarang masuk ke sort()
Selain menambah, menghapus, dan meng-update, kita juga sering perlu mengurutkan data.
Misalnya:
val names = mutableListOf(
"Sarah",
"Ali",
"Muhammad",
"Budi"
)
Urutannya masih acak:
Sarah
Ali
Muhammad
Budi
Kita ingin mengurutkan berdasarkan abjad.
Gunakan:
names.sort()
Hasil:
[Ali, Budi, Muhammad, Sarah]
14. Apa yang dilakukan sort()?
sort() mengurutkan elemen berdasarkan urutan alaminya.
Untuk String, secara umum:
A → B → C → D → ...
Contoh:
val names = mutableListOf(
"Citra",
"Ali",
"Budi",
"Doni"
)
names.sort()
println(names)
Output:
[Ali, Budi, Citra, Doni]
15. sort() mengubah List asli
Perhatikan bahwa:
names.sort()
mengubah urutan elemen pada names itu sendiri.
Misalnya awal:
names
↓
[Sarah, Ali, Budi, Citra]
Setelah:
names.sort()
menjadi:
names
↓
[Ali, Budi, Citra, Sarah]
Jadi sort() pada MutableList melakukan perubahan terhadap List tersebut.
16. Kenapa sorting berguna?
Dalam aplikasi nyata, data sering tidak datang dalam urutan yang kita inginkan.
Misalnya daftar pelanggan:
[Zaki, Budi, Ali, Citra]
Kita mungkin ingin menampilkan:
[Ali, Budi, Citra, Zaki]
Atau daftar produk:
[Laptop, Apple, Camera, Keyboard]
ingin diurutkan berdasarkan nama.
Sorting membuat data lebih mudah:
- dibaca
- dicari
- ditampilkan
- dibandingkan
17. Sorting angka
sort() tidak hanya untuk String.
Contohnya:
val numbers = mutableListOf(
50,
10,
30,
20,
40
)
numbers.sort()
println(numbers)
Hasil:
[10, 20, 30, 40, 50]
Jadi:
String → urut alfabet
Number → urut dari kecil ke besar
18. sort() vs sortDescending()
Untuk MutableList, ada juga:
sortDescending()
Kalau:
val numbers = mutableListOf(
10,
50,
20,
40,
30
)
Gunakan:
numbers.sort()
hasil:
[10, 20, 30, 40, 50]
Sedangkan:
numbers.sortDescending()
hasil:
[50, 40, 30, 20, 10]
Jadi:
sort() → ascending
kecil → besar
A → Z
sortDescending() → descending
besar → kecil
Z → A
19. Contoh lengkap semua operasi
Sekarang kita gabungkan materi dari beberapa video.
fun main() {
val names = mutableListOf(
"Ali",
"Muhammad",
"Jack",
"Perla"
)
// Append
names.add("Sarah")
// Insert
names.add(2, "Lara")
// Update
names[3] = "Pamela"
// Remove by value
names.remove("Sarah")
// Remove by index
names.removeAt(0)
// Sort
names.sort()
println(names)
}
Mari kita ikuti satu per satu.
Kondisi awal
[Ali, Muhammad, Jack, Perla]
add("Sarah")
[Ali, Muhammad, Jack, Perla, Sarah]
add(2, "Lara")
[Ali, Muhammad, Lara, Jack, Perla, Sarah]
names[3] = "Pamela"
Index 3 saat itu adalah Jack.
Jadi:
[Ali, Muhammad, Lara, Pamela, Perla, Sarah]
remove("Sarah")
[Ali, Muhammad, Lara, Pamela, Perla]
removeAt(0)
Ali dihapus:
[Muhammad, Lara, Pamela, Perla]
sort()
Akhirnya:
[Lara, Muhammad, Pamela, Perla]
20. Peta besar MutableList yang sudah kita pelajari
Sekarang coba lihat semuanya sebagai satu kesatuan:
MutableList
│
┌─────────────┼─────────────┐
│ │ │
ADD/TAMBAH REMOVE/HAPUS UPDATE
│ │ │
↓ ↓ ↓
add(value) remove(value) list[index] = value
add(index, removeAt(index)
value)
Kemudian:
MutableList
│
├── add()
├── remove()
├── removeAt()
├── update dengan [index]
└── sort()
21. Bedakan 5 operasi ini
Ini yang paling penting untuk dihafalkan:
| Operasi | Kode | Efek |
|---|---|---|
| Append | list.add("X") | Tambah X di akhir |
| Insert | list.add(2, "X") | Tambah X di index 2 |
| Remove | list.remove("X") | Hapus X berdasarkan nilai |
| RemoveAt | list.removeAt(2) | Hapus berdasarkan index 2 |
| Update | list[2] = "X" | Ganti isi index 2 |
| Sort | list.sort() | Urutkan elemen |
22. Trik mengingatnya
Bayangkan kamu memiliki:
[Ali, Budi, Citra]
Mau MENAMBAH Doni?
list.add("Doni")
“Doni, masuk!”
Mau MENYISIPKAN Doni di tengah?
list.add(1, "Doni")
“Doni, masuk di posisi 1.”
Mau MENGHAPUS Doni?
list.remove("Doni")
“Doni, keluar.”
Mau mengeluarkan orang di posisi 1?
list.removeAt(1)
“Siapa pun yang berada di posisi 1, keluar.”
Mau MENGGANTI orang di posisi 1?
list[1] = "Eka"
“Orang di posisi 1 diganti menjadi Eka.”
Mau MENGURUTKAN?
list.sort()
“Semuanya, silakan berbaris sesuai urutan.”
23. Hal paling penting dari video ini
Ada dua konsep utama yang perlu kamu kuasai.
Pertama: Update
list[index] = newValue
Artinya:
Mengganti nilai yang sudah ada tanpa menambah jumlah elemen.
Contoh:
Sebelum:
[Ali, Budi, Citra]
list[1] = "Doni"
Sesudah:
[Ali, Doni, Citra]
Jumlah tetap 3.
Kedua: Sorting
list.sort()
Artinya:
Mengurutkan elemen di dalam
MutableList.
Contoh:
Sebelum:
[Zaki, Ali, Citra, Budi]
sort()
Sesudah:
[Ali, Budi, Citra, Zaki]
🧠 Ringkasan super singkat
add("X")
↓
Tambah X di akhir
add(2, "X")
↓
Sisipkan X di index 2
remove("X")
↓
Hapus X berdasarkan nilai
removeAt(2)
↓
Hapus elemen di index 2
list[2] = "X"
↓
Ganti elemen index 2 dengan X
list.sort()
↓
Urutkan elemen
Dan satu aturan yang jangan sampai lupa:
Index dimulai dari 0, dan index terakhir adalah
size - 1.
Kalau size = 5, maka index valid adalah:
0 1 2 3 4
bukan sampai 5.
Jadi list[5] sudah di luar batas.