Array Objek di Java

⚡ Ringkasan Cerdas

Array Objek di Java Menyimpan referensi objek dalam slot berurutan berukuran tetap, memungkinkan satu variabel untuk menyimpan banyak instance dari suatu kelas dan mengakses masing-masing melalui indeks untuk iterasi, mutasi, dan penerusan ke metode.

  • 📦 Penyimpanan referensi: Setiap slot di dalam Java Array objek menyimpan referensi ke suatu objek, bukan objek itu sendiri, mirip dengan variabel objek lainnya. Java.
  • 🧱 Pembuatan dua langkah: Alokasikan array dengan new ClassName[size], lalu alokasikan setiap objek dengan new ClassName() sebelum memanggil metode pada objek tersebut.
  • ⚠️ NullPointerException: Setiap slot awalnya bernilai null. Memanggil metode pada slot yang belum diinisialisasi akan melempar NullPointerException saat runtime.
  • 🔁 Pengulangan: Gunakan perulangan for dengan panjang array atau perulangan for yang disempurnakan untuk menelusuri setiap objek dalam array.
  • 📏 Ukuran tetap: Array tidak dapat bertambah ukurannya setelah dialokasikan. Gunakan ArrayList ketika jumlah objek berubah saat runtime.
  • ️ Inisialisasi konstruktor: Konstruktor yang dilewatkan secara langsung selama pembuatan memberikan pengaturan yang lebih singkat dan aman daripada panggilan setter setelahnya.
  • 🚚 Parameter metode: Meneruskan array ke suatu metode akan mentransfer referensi, sehingga perubahan di dalam metode tersebut akan terlihat oleh pemanggil.

Array Objek di Java

Apa itu Array Objek dalam Java?

A Java susunan objek menyimpan beberapa instance objek dari kelas yang sama dalam satu wadah berukuran tetap. Tidak seperti array primitif yang menyimpan nilai seperti int, double, atau boolean Langsung di setiap slot, sebuah array objek menyimpan referensiSetiap slot menunjuk ke lokasi memori suatu objek, dan objek itu sendiri berada di slot tersebut. Java tumpukan.

Tata letak ini sesuai dengan cara objek apa pun variabel in Java Berfungsi. Array hanya mengelompokkan beberapa referensi objek bersama-sama sehingga Anda dapat mengaksesnya berdasarkan indeks. Ini adalah pilihan alami ketika jumlah objek diketahui sebelumnya dan tidak berubah selama masa hidup program.

Sintaksis

ClassName[] obj = new ClassName[array_length];

Sisi kanan mengalokasikan ruang untuk array_length referensi, semuanya diinisialisasi ke nullTidak ada objek dari ClassName Yang ada hanyalah wadah yang dapat menyimpan referensi ke objek-objek tersebut.

Cara Membuat Array Objek di Java

Membuat array objek yang berfungsi selalu membutuhkan dua langkah alokasi. Langkah pertama mengalokasikan kontainer referensi, dan langkah kedua mengalokasikan setiap objek yang akan ditunjuk oleh kontainer tersebut. Lewatiping langkah kedua adalah sumber tunggal yang paling umum dari NullPointerException untuk pemula Java kode.

Langkah 1) Buka Anda editor kode lalu salin kode berikut:

class ObjectArray {
    public static void main(String args[]) {
        Account obj[] = new Account[2];
        // obj[0] = new Account();
        // obj[1] = new Account();
        obj[0].setData(1, 2);
        obj[1].setData(3, 4);
        System.out.println("For Array Element 0");
        obj[0].showData();
        System.out.println("For Array Element 1");
        obj[1].showData();
    }
}

class Account {
    int a;
    int b;

    public void setData(int c, int d) {
        a = c;
        b = d;
    }

    public void showData() {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
}

Langkah 2) Simpan file sebagai ObjectArray.javalalu kompilasi dan jalankan.

Langkah 3) Perhatikan kesalahannya. Cobalah untuk memperbaiki kesalahan tersebut sebelum melanjutkan ke Langkah 4.

Langkah 4) Periksa garisnya Account obj[] = new Account[2];Ini mengalokasikan sebuah array yang berisi dua variabel referensi bertipe Account, tetapi tidak mengalokasikan apa pun Account benda. Kedua slot dapat menampung null, dan memanggil obj[0].setData(...) pada null referensi melempar NullPointerException saat berjalan.

Java Variabel referensi Array of Objects

Langkah 5) Hapus tanda komentar pada baris 4 dan 5. Kedua baris ini menciptakan sesuatu yang nyata. Account objek dan menetapkannya ke obj[0] ke obj[1]Array tersebut sekarang menyimpan referensi yang sebenarnya, dan kode berjalan dengan lancar.

Java Array Objek yang terisi

Keluaran:

For Array Element 0
Value of a = 1
Value of b = 2
For Array Element 1
Value of a = 3
Value of b = 4

Cara Menginisialisasi Array Objek di Java

Selain inisialisasi berbasis setter yang ditunjukkan di atas, sebuah array objek dapat diinisialisasi dengan tiga cara yang lebih rapi. Setiap gaya mengorbankan kerumitan demi kejelasan, jadi pilihlah yang paling sesuai dengan situasi Anda.

  1. Inisialisasi loop — alokasikan array, lalu telusuri setiap indeks dan tetapkan objek baru. Ini adalah pola standar untuk array besar atau ketika jumlah objek bersifat dinamis.
  2. Inisialisasi konstruktor — meneruskan nilai langsung ke konstruktor pada saat pembuatan sehingga tidak diperlukan panggilan setter terpisah.
  3. Inisialisasi literal array — mendeklarasikan dan mengisi dalam satu pernyataan dengan inline { ... } Inisialisasi, ideal untuk himpunan tetap kecil.
class Account {
    int a, b;

    public Account(int a, int b) {   // constructor
        this.a = a;
        this.b = b;
    }
}

public class InitDemo {
    public static void main(String[] args) {

        // 1) Loop initialisation
        Account[] loopArr = new Account[3];
        for (int i = 0; i < loopArr.length; i++) {
            loopArr[i] = new Account(i, i * 10);
        }

        // 2) Constructor initialisation, one slot at a time
        Account[] ctorArr = new Account[2];
        ctorArr[0] = new Account(1, 2);
        ctorArr[1] = new Account(3, 4);

        // 3) Array literal initialisation
        Account[] litArr = {
            new Account(5, 6),
            new Account(7, 8),
            new Account(9, 10)
        };

        System.out.println("loop size   = " + loopArr.length);
        System.out.println("ctor size   = " + ctorArr.length);
        System.out.println("literal size= " + litArr.length);
    }
}

Inisialisasi loop adalah pengaturan default teraman karena menjamin tidak ada slot yang tersisa. nullInisialisasi konstruktor membuat maksud menjadi eksplisit ketika setiap objek membutuhkan argumen yang berbeda, dan literal array menjaga agar kode demo kecil tetap ringkas. Jangan mencampur gaya di dalam array yang sama kecuali Anda memiliki alasan: konsistensi membuat bug lebih mudah ditemukan.

Mengiterasi dan Mengakses Elemen dalam sebuah Java Array Objek

Setelah sebuah array objek terisi, tiga pola mencakup hampir semua kebutuhan akses. Pilih gaya perulangan yang sesuai dengan seberapa banyak kontrol yang dibutuhkan kode terhadap indeks.

klasik for lingkaran memberikan akses ke indeks, yang berguna untuk mengganti elemen, membandingkan tetangga, atau mengulangi subrentang.

for (int i = 0; i < obj.length; i++) {
    System.out.println("Element " + i);
    obj[i].showData();
}

ditingkatkan for lingkaran (Perulangan “for-each”) menyembunyikan indeks dan terbaca lebih alami ketika indeks tidak dibutuhkan:

for (Account acc : obj) {
    acc.showData();
}

Aliran (Java 8 dan seterusnya) mengubah array menjadi pipeline, yang berguna untuk penyaringan, pemetaanpingatau melakukan agregasi tanpa menulis perulangan:

import java.util.Arrays;

Arrays.stream(obj)
      .filter(acc -> acc.a > 0)
      .forEach(Account::showData);

Untuk membaca atau memperbarui satu elemen, gunakan akses indeks langsung, misalnya obj[1].setData(10, 20)Selalu periksa panjangnya terlebih dahulu dengan obj.length menghindari ArrayIndexOutOfBoundsException. Ketika slot apa pun bisa null, lindungi akses dengan pemeriksaan null atau Optional agar program tetap berjalan dan tidak mengalami kerusakan.

Array Objek vs ArrayList Objek dalam Java

Array objek biasa cepat dan mudah diprediksi, tetapi ukurannya yang tetap menjadi batasan begitu jumlah objek berubah saat runtime. JavaKerangka kerja Koleksi menyediakan ArrayList sebagai alternatif dinamis. Tabel di bawah ini menyoroti kapan setiap pilihan tepat digunakan.

FiturArray ObjekArrayList Objek
UkuranTetap pada saat pembuatanMembesar dan menyusut secara otomatis
PernyataanAccount[] a = new Account[5];List<Account> list = new ArrayList<>();
Akses elemena[i]list.get(i)
Tambahkan elemenTidak didukung setelah pembuatanlist.add(obj)
Ketik keamananDiketik pada waktu kompilasi berdasarkan deklarasiGenerik diberlakukan pada waktu kompilasi.
PerformancePembacaan terindeks yang sedikit lebih cepatPenambahan amortisasi O(1), beberapa overhead per elemen
Lebih disukai ketikaUkuran sudah diketahui dan tetap.Ukuran tidak diketahui atau berubah saat dijalankan.

Gunakan array ketika penggunaan memori yang terbatas dan pengindeksan yang dapat diprediksi menjadi penting, misalnya dalam tata letak matriks atau jalur pemrosesan yang sangat penting bagi kinerja. Pilihlah array. ArrayList Dalam sebagian besar kode aplikasi sehari-hari, karena kemampuan untuk menambah dan menghapus tanpa alokasi ulang lebih penting daripada biaya tambahan per elemen yang kecil.

Pertanyaan Umum Demo Slot

Serangkaian objek dalam Java adalah kontainer berukuran tetap yang menyimpan referensi ke instance dari kelas yang sama. Setiap slot menunjuk ke sebuah objek di heap, dan elemen diakses berdasarkan indeks berbasis nol menggunakan tanda kurung siku.

Deklarasikan array dengan ClassName[] arr = new ClassName[size], kemudian buat setiap objek dengan new ClassName() dalam sebuah loop atau dengan literal array inline. Kedua langkah ini diperlukan; langkah pertama hanya mengalokasikan slot referensi.

Karena `new ClassName[size]` hanya mengalokasikan array itu sendiri. Setiap slot awalnya bernilai null, sehingga memanggil metode apa pun pada slot tersebut akan melempar `NullPointerException`. Perbaiki dengan menetapkan `new ClassName()` ke setiap indeks sebelum digunakan.

Array memiliki ukuran tetap yang dipilih saat pembuatan, sedangkan ArrayList tumbuh dan menyusut secara otomatis. Array memberikan pembacaan terindeks yang sedikit lebih cepat; ArrayList menambahkan metode tambah, hapus, dan streaming yang nyaman untuk kode aplikasi sehari-hari.

Gunakan perulangan for klasik dengan arr.length ketika Anda membutuhkan indeks, atau perulangan for-each yang disempurnakan untuk iterasi sederhana. Untuk pemfilteran atau transformasi, bungkus array dengan Arrays.stream(arr) dan rangkai pipeline yang Anda butuhkan.

Deklarasikan parameter sebagai ClassName[] name, lalu panggil metode dengan variabel array tersebut. Java Metode ini meneruskan referensi array berdasarkan nilai, sehingga perubahan pada field elemen di dalam metode akan terlihat oleh pemanggil.

Generator kode pembelajaran mesin mengenali pola alokasi dua langkah dan melengkapi baris `new ClassName()` yang hilang yang sering dilupakan oleh pemula. Mereka juga menyarankan `ArrayList` ketika ukuran koleksi target tidak diketahui, sehingga mengurangi kesalahan `NullPointerException`.

Ya. GitHub Copilot menghasilkan deklarasi array, perulangan konstruktor, blok iterasi, dan konversi ArrayList dari komentar yang menjelaskan model domain. RevLihat kode yang dihasilkan untuk argumen konstruktor yang benar dan penanganan null yang aman sebelum digunakan.

Ringkaslah postingan ini dengan: