Memperpanjang Panjang Array

1. Ikhtisar

Dalam tutorial ini, kita akan melihat berbagai cara untuk memperluas array Java.

Karena array adalah blok memori yang berdekatan, jawabannya mungkin tidak langsung terlihat, tetapi mari kita uraikan sekarang.

2. Menggunakan Arrays.copyOf

Pertama, mari kita lihat Arrays.copyOf . Kami akan menyalin array dan menambahkan elemen baru ke salinan:

public Integer[] addElementUsingArraysCopyOf(Integer[] srcArray, int elementToAdd) { Integer[] destArray = Arrays.copyOf(srcArray, srcArray.length + 1); destArray[destArray.length - 1] = elementToAdd; return destArray; }

Cara kerja Arrays.copyOf adalah mengambil srcArray dan menyalin jumlah elemen yang ditentukan dalam argumen panjang ke array baru yang dibuat secara internal. Ukuran dari array baru adalah argumen yang kami berikan.

Satu hal yang perlu diperhatikan adalah ketika argumen panjang lebih besar dari ukuran array sumber, Arrays.copyOf akan mengisi elemen ekstra di array tujuan dengan null .

Bergantung pada tipe data, perilaku pengisian akan berbeda. Misalnya, jika kita menggunakan tipe data primitif sebagai pengganti Integer maka elemen tambahan diisi dengan angka nol. Dalam kasus char , Arrays.copyOf akan mengisi elemen ekstra dengan null dan dalam kasus boolean, dengan false .

3. Menggunakan ArrayList

Cara selanjutnya yang akan kita lihat adalah menggunakan ArrayList.

Kami pertama-tama akan mengonversi array menjadi ArrayList dan kemudian menambahkan elemen. Kemudian kita akan mengubah ArrayList kembali menjadi array :

public Integer[] addElementUsingArrayList(Integer[] srcArray, int elementToAdd) { Integer[] destArray = new Integer[srcArray.length + 1]; ArrayList arrayList = new ArrayList(Arrays.asList(srcArray)); arrayList.add(elementToAdd); return arrayList.toArray(destArray); }

Perhatikan bahwa kita telah meneruskan srcArray dengan mengonversinya menjadi Collection. The srcArray akan mengisi array yang mendasari dalam ArrayList .

Juga, hal lain yang perlu diperhatikan adalah kita telah meneruskan array tujuan sebagai argumen ke toArray . Metode ini akan menyalin array yang mendasari ke destArray .

4. Menggunakan System.arraycopy

Terakhir, kita akan melihat System.arraycopy , yang sangat mirip dengan Arrays.copyOf :

public Integer[] addElementUsingSystemArrayCopy(Integer[] srcArray, int elementToAdd) { Integer[] destArray = new Integer[srcArray.length + 1]; System.arraycopy(srcArray, 0, destArray, 0, srcArray.length); destArray[destArray.length - 1] = elementToAdd; return destArray; }

Satu fakta menarik adalah bahwa Arrays.copyOf secara internal menggunakan metode ini.

Di sini kita dapat melihat bahwa kita menyalin elemen dari srcArray ke destArray dan kemudian menambahkan elemen baru ke destArray .

5. Kinerja

Satu hal yang umum dalam semua solusi adalah kita harus membuat array baru dengan satu atau lain cara. Alasannya terletak pada bagaimana array dialokasikan dalam memori. Sebuah array memiliki blok memori yang berdekatan untuk pencarian super cepat, itulah sebabnya kita tidak bisa begitu saja mengubah ukurannya.

Ini, tentu saja, berdampak pada kinerja, terutama untuk array besar. Inilah mengapa ArrayList mengalokasikan terlalu banyak, secara efektif mengurangi berapa kali JVM perlu mengalokasikan ulang memori.

Tetapi, jika kita melakukan banyak penyisipan, array mungkin bukan struktur data yang benar, dan kita harus mempertimbangkan LinkedList .

6. Kesimpulan

Pada artikel ini, kami telah menjelajahi berbagai cara untuk menambahkan elemen ke akhir larik.

Dan, seperti biasa, seluruh kode tersedia di GitHub.