Pelajaran modul (2/2)
Koleksi dan ArrayList
Array tradisional di Java memiliki ukuran tetap yang ditentukan pada saat pembuatannya. Untuk bekerja dengan daftar data yang ukurannya dapat bervariasi secara dinamis, Java menyediakan Java Collections Framework. Kelas yang paling umum digunakan adalah ArrayList.
Kelas ArrayList dan Generik
ArrayList mengimplementasikan array yang dapat diubah ukurannya di memori. Untuk mendeklarasikan ArrayList, kita harus menentukan jenis elemen yang akan dikandungnya dengan mengapitnya dalam tanda kurung siku < >. Fitur ini disebut Generik.
Untuk menggunakan ArrayList, kita harus mengimpornya di awal file dari java.util.ArrayList.
Deklarasi dan Instansiasi:
import java.util.ArrayList;
ArrayList<String> shoppingList = new ArrayList<>();Metode Inti
Berikut adalah operasi dasar pada ArrayList:
add(element): Menambahkan elemen ke akhir daftar.get(index): Mengembalikan elemen pada indeks yang ditentukan (diindeks 0).size(): Mengembalikan jumlah elemen yang saat ini ada dalam daftar.remove(index): Menghapus elemen pada indeks yang ditentukan.
shoppingList.add("Pane");
shoppingList.add("Latte");
System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"Mengulangi Daftar (Untuk Setiap)
Perulangan for-each adalah struktur ideal untuk melakukan iterasi melalui semua elemen koleksi:
for (String item : shoppingList) {
System.out.println(item);
}Array vs ArrayList: Memori dan Kinerja
Meskipun ArrayList jauh lebih fleksibel daripada array statis, ia memiliki trade-off kinerja dan memori:
- Array Statis: Dialokasikan dalam blok memori yang berdekatan, memiliki ukuran tetap, dan mengakses elemen melalui indeks dengan sangat cepat. Ini menyimpan tipe primitif secara langsung tanpa overhead.
- ArrayList: Secara internal, ia mengelola array yang diubah ukurannya (dengan membuat array baru yang lebih besar dan menyalin elemen lama) ketika kapasitas awalnya (biasanya 10) terlampaui. Selain itu, ia hanya menyimpan referensi objek, menimbulkan overhead memori untuk setiap elemen.
Autoboxing dan Unboxing
Karena ArrayList hanya dapat menampung objek, Java secara otomatis melakukan konversi antara tipe primitif dan kelas pembungkusnya masing-masing:
- Autoboxing: Konversi otomatis dari tipe primitif ke kelas wrapper. Misalnya, saat Anda menulis
numbers.add(42), Java secara otomatis mengonversi42(int) menjadiInteger.valueOf(42)(Integer). - Unboxing: Konversi otomatis dari kelas wrapper ke tipe primitif. Misalnya, saat Anda menjalankan
int num = numbers.get(0), Java secara internal mengonversiIntegermenjadiint.
Cobalah sendiri
Impor ArrayList, deklarasikan nama nama ArrayList dari String. Tambahkan Alice dan Bob ke dalam daftar, lalu cetak ukurannya menggunakan metode size().
Tunjukkan petunjuk
Sertakan `import java.util.ArrayList;` di bagian atas. Buat daftar dengan `ArrayList<String> nama = new ArrayList<>();`, tambahkan elemen, dan cetak ukurannya dengan `nama.ukuran()`.
Solusi tersedia setelah 3 upaya
Deklarasikan ArrayList angka bernama Integer, tambahkan angka 42, dan cetak dengan mengambilnya di indeks 0 menggunakan get().
Tunjukkan petunjuk
Gunakan `ArrayList<Integer> angka = new ArrayList<>();` (dengan kelas pembungkus Integer) dan cetak dengan `System.out.println(numbers.get(0));`.
Solusi tersedia setelah 3 upaya
Deklarasikan ArrayList dari String bernama warna. Tambahkan warna Merah, Hijau, dan Biru ke dalam daftar. Terakhir, gunakan perulangan for-each untuk menelusuri daftar dan mencetak setiap warna ke layar.
Tunjukkan petunjuk
Deklarasikan daftar dengan `ArrayList<String> warna = ArrayList baru<>();`, tambahkan tiga warna, dan gunakan loop `for (String c : warna)` untuk mencetaknya menggunakan `System.out.println(c);`.
Solusi tersedia setelah 3 upaya