Menambahkan Elemen ke Java Array vs ArrayList

1. Ikhtisar

Dalam tutorial ini, kita akan melihat secara singkat persamaan dan ketidaksamaan dalam alokasi memori antara array Java dan ArrayList standar . Selanjutnya, kita akan melihat bagaimana menambahkan dan menyisipkan elemen dalam array dan ArrayList .

2. Java Array dan ArrayList

Array Java adalah struktur data dasar yang disediakan oleh bahasa. Sebaliknya, ArrayList adalah implementasi antarmuka Daftar yang didukung oleh array dan disediakan dalam Java Collections Framework.

2.1. Mengakses dan Memodifikasi Elemen

Kita dapat mengakses dan memodifikasi elemen array menggunakan notasi tanda kurung siku:

System.out.println(anArray[1]); anArray[1] = 4;

Di sisi lain, ArrayList memiliki serangkaian metode untuk mengakses dan memodifikasi elemen:

int n = anArrayList.get(1); anArrayList.set(1, 4);

2.2. Ukuran Tetap vs Dinamis

Array dan ArrayList sama-sama mengalokasikan memori heap dengan cara yang sama, tetapi yang membedakannya adalah array berukuran tetap, sedangkan ukuran ArrayList meningkat secara dinamis.

Karena array Java berukuran tetap, kita perlu memberikan ukuran saat membuat instance-nya. Tidak mungkin untuk meningkatkan ukuran larik setelah dibuat instance-nya. Sebagai gantinya, kita perlu membuat array baru dengan ukuran yang disesuaikan dan menyalin semua elemen dari array sebelumnya.

ArrayList adalah implementasi array yang dapat diubah ukurannya dari antarmuka Daftar - yaitu, ArrayList tumbuh secara dinamis saat elemen ditambahkan ke dalamnya. Ketika jumlah elemen saat ini (termasuk elemen baru yang akan ditambahkan ke ArrayList ) lebih besar dari ukuran maksimum dari array yang mendasarinya, maka ArrayList akan meningkatkan ukuran dari array yang mendasarinya.

Strategi pertumbuhan untuk larik yang mendasari bergantung pada implementasi ArrayList . Namun, karena ukuran larik yang mendasari tidak dapat ditingkatkan secara dinamis, larik baru dibuat dan elemen larik lama disalin ke dalam larik baru.

Operasi penambahan memiliki biaya waktu diamortisasi yang konstan. Dengan kata lain, menambahkan n elemen ke ArrayList membutuhkan waktu O (n) .

2.3. Jenis Elemen

Sebuah array bisa berisi tipe data primitif dan juga non-primitif, bergantung pada definisi dari array. Namun, sebuah ArrayList hanya dapat berisi jenis data non-primitif .

Saat kita menyisipkan elemen dengan tipe data primitif ke dalam ArrayList , compiler Java secara otomatis mengonversi tipe data primitif ke dalam kelas pembungkus objek yang sesuai.

Sekarang mari kita lihat bagaimana menambahkan dan menyisipkan elemen dalam array Java dan ArrayList .

3. Menambahkan Elemen

Seperti yang telah kita lihat, array berukuran tetap.

Jadi, untuk menambahkan elemen, pertama, kita perlu mendeklarasikan array baru yang lebih besar dari array lama dan menyalin elemen dari array lama ke array yang baru dibuat. Setelah itu, kita bisa menambahkan elemen baru ke array yang baru dibuat ini.

Mari kita lihat implementasinya di Java tanpa menggunakan kelas utilitas apa pun:

public Integer[] addElementUsingPureJava(Integer[] srcArray, int elementToAdd) { Integer[] destArray = new Integer[srcArray.length+1]; for(int i = 0; i < srcArray.length; i++) { destArray[i] = srcArray[i]; } destArray[destArray.length - 1] = elementToAdd; return destArray; }

Bergantian, kelas Array menyediakan metode utilitas copyOf () , yang membantu dalam membuat larik baru dengan ukuran lebih besar dan menyalin semua elemen dari larik lama:

int[] destArray = Arrays.copyOf(srcArray, srcArray.length + 1);

Setelah kita membuat array baru, kita dapat dengan mudah menambahkan elemen baru ke dalam array:

destArray[destArray.length - 1] = elementToAdd;

Di sisi lain, menambahkan elemen di ArrayList cukup mudah :

anArrayList.add(newElement);

4. Memasukkan Elemen pada Indeks

Memasukkan elemen pada indeks tertentu tanpa kehilangan elemen yang ditambahkan sebelumnya bukanlah tugas yang sederhana dalam array.

Pertama-tama, jika array sudah berisi jumlah elemen yang sama dengan ukurannya, maka pertama-tama kita perlu membuat array baru dengan ukuran yang lebih besar dan menyalin elemen tersebut ke array baru.

Selanjutnya, kita perlu menggeser semua elemen yang muncul setelah indeks yang ditentukan dengan satu posisi ke kanan:

public static int[] insertAnElementAtAGivenIndex(final int[] srcArray, int index, int newElement) { int[] destArray = new int[srcArray.length+1]; int j = 0; for(int i = 0; i < destArray.length-1; i++) { if(i == index) { destArray[i] = newElement; } else { destArray[i] = srcArray[j]; j++; } } return destArray; }

Namun, kelas ArrayUtils memberi kita solusi yang lebih sederhana untuk memasukkan item ke dalam array :

int[] destArray = ArrayUtils.insert(2, srcArray, 77);

Kita harus menentukan indeks di mana kita ingin memasukkan nilai, larik sumber, dan nilai yang akan disisipkan.

Metode insert () mengembalikan larik baru yang berisi lebih banyak elemen, dengan elemen baru pada indeks yang ditentukan dan semua elemen yang tersisa bergeser satu posisi ke kanan.

Perhatikan bahwa argumen terakhir metode insert () adalah argumen variabel, jadi kita bisa memasukkan sejumlah item ke dalam array.

Mari kita gunakan untuk memasukkan tiga elemen dalam srcArray mulai dari indeks dua:

int[] destArray = ArrayUtils.insert(2, srcArray, 77, 88, 99);

Dan elemen yang tersisa akan digeser tiga tempat ke kanan.

Selanjutnya, ini dapat dicapai dengan mudah untuk ArrayList :

anArrayList.add(index, newElement);

ArrayList menggeser elemen dan menyisipkan elemen di lokasi yang diperlukan.

5. Kesimpulan

Pada artikel ini, kita melihat array Java dan ArrayList . Selanjutnya, kami melihat persamaan dan perbedaan antara keduanya. Akhirnya, kami melihat bagaimana menambahkan dan menyisipkan elemen dalam array dan ArrayList .

Seperti biasa, kode sumber lengkap dari contoh yang berfungsi tersedia di GitHub.