Lompati ke konten utama
Modul 4 · Pelajaran 2 dari 28/14 dalam kursus~15 min
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:

Java
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Metode Inti

Berikut adalah operasi dasar pada ArrayList:

  1. add(element): Menambahkan elemen ke akhir daftar.
  2. get(index): Mengembalikan elemen pada indeks yang ditentukan (diindeks 0).
  3. size(): Mengembalikan jumlah elemen yang saat ini ada dalam daftar.
  4. remove(index): Menghapus elemen pada indeks yang ditentukan.
Java
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:

Java
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 mengonversi 42 (int) menjadi Integer.valueOf(42) (Integer).
  • Unboxing: Konversi otomatis dari kelas wrapper ke tipe primitif. Misalnya, saat Anda menjalankan int num = numbers.get(0), Java secara internal mengonversi Integer menjadi int.

Cobalah sendiri

Latihan#java.m4.l2.e1
Upaya: 0Memuat…

Impor ArrayList, deklarasikan nama nama ArrayList dari String. Tambahkan Alice dan Bob ke dalam daftar, lalu cetak ukurannya menggunakan metode size().

Memuat editor…
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

Latihan#java.m4.l2.e2
Upaya: 0Memuat…

Deklarasikan ArrayList angka bernama Integer, tambahkan angka 42, dan cetak dengan mengambilnya di indeks 0 menggunakan get().

Memuat editor…
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

Latihan#java.m4.l2.e3
Upaya: 0Memuat…

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.

Memuat editor…
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