Menambah Elemen ke Java Array vs ArrayList

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat secara ringkas persamaan dan perbezaan dalam peruntukan memori antara array Java dan ArrayList standard . Selanjutnya, kita akan melihat cara menambahkan dan memasukkan elemen dalam larik dan ArrayList .

2. Susunan Java dan ArrayList

Array Java adalah struktur data asas yang disediakan oleh bahasa. Sebaliknya, ArrayList merupakan pelaksanaan Senarai muka disokong oleh array dan disediakan dalam Rangka Kerja Collections Java.

2.1. Mengakses dan Mengubah Elemen

Kami dapat mengakses dan mengubah elemen array menggunakan notasi tanda kurung persegi:

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

Sebaliknya, ArrayList mempunyai sekumpulan kaedah untuk mengakses dan mengubah elemen:

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

2.2. Tetap vs Saiz Dinamik

Array dan ArrayList kedua-duanya memperuntukkan memori timbunan dengan cara yang serupa, tetapi yang berbeza ialah array berukuran tetap, sementara ukuran ArrayList meningkat secara dinamik.

Oleh kerana array Java berukuran tetap, kita perlu memberikan ukuran sambil membuat instansi. Tidak mustahil untuk meningkatkan ukuran larik setelah dibuat. Sebaliknya, kita perlu membuat susunan baru dengan ukuran yang disesuaikan dan menyalin semua elemen dari susunan sebelumnya.

ArrayList adalah pelaksanaan array yang dapat diubah suai antara muka Senarai - iaitu, ArrayList berkembang secara dinamik ketika elemen ditambahkan ke dalamnya. Apabila bilangan elemen semasa (termasuk elemen baru yang akan ditambahkan ke ArrayList ) lebih besar daripada ukuran maksimum array yang mendasarinya, maka ArrayList akan meningkatkan ukuran array yang mendasari.

Strategi pertumbuhan untuk susunan yang mendasari bergantung pada pelaksanaan ArrayList . Namun, kerana ukuran array yang mendasari tidak dapat ditingkatkan secara dinamis, array baru dibuat dan elemen array yang lama disalin ke array baru.

Operasi tambah mempunyai kos masa terlunas yang tetap. Dengan kata lain, menambahkan unsur n ke ArrayList memerlukan masa O (n) .

2.3. Jenis Elemen

Array boleh mengandungi jenis data primitif dan bukan primitif, bergantung pada definisi array. Walau bagaimanapun, yang ArrayList hanya boleh mengandungi jenis data bukan primitif .

Apabila kita memasukkan elemen dengan jenis data primitif ke dalam ArrayList , penyusun Java secara automatik menukar jenis data primitif menjadi kelas pembungkus objek yang sesuai.

Sekarang mari kita lihat cara menambahkan dan memasukkan elemen dalam tatasusunan Java dan ArrayList .

3. Menambah Elemen

Seperti yang telah kita lihat, tatasusunan mempunyai ukuran tetap.

Jadi, untuk menambahkan elemen, pertama, kita perlu menyatakan susunan baru yang lebih besar daripada larik lama dan menyalin elemen dari susunan lama ke susunan yang baru dibuat. Selepas itu, kita dapat menambahkan elemen baru ke array yang baru dibuat ini.

Mari lihat pelaksanaannya di Java tanpa menggunakan kelas utiliti:

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; }

Sebagai alternatif, kelas Arrays menyediakan kaedah utiliti copyOf () , yang membantu membuat susunan baru dengan ukuran lebih besar dan menyalin semua elemen dari larik lama:

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

Sebaik sahaja kami membuat array baru, kami dapat menambahkan elemen baru ke array dengan mudah:

destArray[destArray.length - 1] = elementToAdd;

Sebaliknya, menambahkan elemen dalam ArrayList agak mudah :

anArrayList.add(newElement);

4. Memasukkan Elemen pada Indeks

Memasukkan elemen pada indeks tertentu tanpa kehilangan elemen yang ditambahkan sebelumnya bukanlah tugas mudah dalam tatasusunan.

Pertama sekali, jika susunan sudah mengandungi bilangan elemen yang sama dengan ukurannya, maka pertama-tama kita perlu membuat susunan baru dengan ukuran yang lebih besar dan menyalin elemen ke array baru.

Selanjutnya, kita perlu mengalihkan semua elemen yang muncul setelah indeks yang ditentukan oleh satu kedudukan 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; }

Walau bagaimanapun, kelas ArrayUtils memberi kami penyelesaian yang lebih mudah untuk memasukkan item ke dalam array :

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

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

Kaedah insert () mengembalikan array baru yang mengandungi sebilangan besar elemen, dengan elemen baru pada indeks yang ditentukan dan semua elemen yang tersisa beralih satu kedudukan ke kanan.

Perhatikan bahawa argumen terakhir kaedah insert () adalah argumen berubah-ubah, jadi kita dapat memasukkan sejumlah item ke dalam array.

Mari gunakannya untuk memasukkan tiga elemen dalam srcArray bermula dari indeks dua:

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

Dan unsur-unsur yang tinggal akan dialihkan tiga tempat ke kanan.

Selanjutnya, ini dapat dicapai secara sepele untuk ArrayList :

anArrayList.add(index, newElement);

ArrayList mengalihkan elemen dan memasukkan elemen ke lokasi yang diperlukan.

5. Kesimpulan

Dalam artikel ini, kami melihat array Java dan ArrayList . Selanjutnya, kami melihat persamaan dan perbezaan antara keduanya. Akhirnya, kami melihat cara menambahkan dan memasukkan elemen dalam larik dan ArrayList .

Seperti biasa, kod sumber penuh contoh kerja boleh didapati di GitHub.