Java Copy Arrays (Menggunakan System arraycopy (), Looping build dan sebagainya)

Dalam tutorial ini, Anda akan belajar tentang berbagai cara yang dapat Anda gunakan untuk menyalin array (baik satu dimensi dan dua dimensi) di Java dengan bantuan contoh.

Di Java, kita dapat menyalin satu larik ke larik lainnya. Ada beberapa teknik yang bisa Anda gunakan untuk menyalin array di Java.

1. Menyalin Array Menggunakan Operator Penugasan

Mari kita ambil contoh,

 class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )

Keluaran :

 1, 2, 3, 4, 5, 6

Dalam contoh di atas, kami telah menggunakan operator assignment ( =) untuk menyalin array bernama angka ke array lain bernama positiveNumbers.

Teknik ini adalah yang termudah dan berhasil juga. Namun, ada masalah dengan teknik ini. Jika kita mengubah elemen satu array, elemen terkait dari array lain juga berubah. Sebagai contoh,

 class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays // change value of first array numbers(0) = -1; // printing the second array for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )

Keluaran :

 -1, 2, 3, 4, 5, 6

Di sini, kita dapat melihat bahwa kita telah mengubah satu nilai dari larik angka. Saat kita mencetak array positiveNumbers, kita dapat melihat bahwa nilai yang sama juga berubah.

Itu karena kedua larik merujuk ke objek larik yang sama. Ini karena salinan yang dangkal. Untuk mempelajari lebih lanjut tentang salinan dangkal, kunjungi salinan dangkal.

Sekarang, untuk membuat objek array baru sambil menyalin array, kita membutuhkan deep copy daripada salinan dangkal.

2. Menggunakan Konstruksi Perulangan untuk Menyalin Array

Mari kita ambil contoh:

 import java.util.Arrays; class Main ( public static void main(String() args) ( int () source = (1, 2, 3, 4, 5, 6); int () destination = new int(6); // iterate and copy elements from source to destination for (int i = 0; i < source.length; ++i) ( destination(i) = source(i); ) // converting array to string System.out.println(Arrays.toString(destination)); ) )

Keluaran :

 (1, 2, 3, 4, 5, 6)

Dalam contoh di atas, kami telah menggunakan forloop untuk melakukan iterasi melalui setiap elemen dari larik sumber. Di setiap iterasi, kami menyalin elemen dari larik sumber ke larik tujuan.

Di sini, larik sumber dan tujuan merujuk ke objek yang berbeda (salinan dalam). Oleh karena itu, jika elemen dari satu array diubah, elemen terkait dari array lain tidak berubah.

Perhatikan pernyataannya,

 System.out.println(Arrays.toString(destination));

Di sini, metode toString () digunakan untuk mengubah array menjadi string. Untuk mempelajari lebih lanjut, kunjungi metode toString () (dokumentasi resmi Java).

3. Menyalin Array Menggunakan metode arraycopy ()

Di Java, class System berisi metode yang dinamai arraycopy()untuk menyalin array. Metode ini adalah pendekatan yang lebih baik untuk menyalin array daripada dua metode di atas.

The arraycopy()Metode memungkinkan Anda untuk menyalin sebagian tertentu dari array sumber ke array tujuan. Sebagai contoh,

 arraycopy(Object src, int srcPos,Object dest, int destPos, int length)

Sini,

  • src - larik sumber yang ingin Anda salin
  • srcPos - posisi awal (indeks) dalam larik sumber
  • dest - larik tujuan tempat elemen akan disalin dari sumber
  • destPos - posisi awal (indeks) dalam larik tujuan
  • length - jumlah elemen untuk disalin

Mari kita ambil contoh:

 // To use Arrays.toString() method import java.util.Arrays; class Main ( public static void main(String() args) ( int() n1 = (2, 3, 12, 4, 12, -2); int() n3 = new int(5); // Creating n2 array of having length of n1 array int() n2 = new int(n1.length); // copying entire n1 array to n2 System.arraycopy(n1, 0, n2, 0, n1.length); System.out.println("n2 = " + Arrays.toString(n2)); // copying elements from index 2 on n1 array // copying element to index 1 of n3 array // 2 elements will be copied System.arraycopy(n1, 2, n3, 1, 2); System.out.println("n3 = " + Arrays.toString(n3)); ) )

Keluaran :

 n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)

Dalam contoh di atas, kami telah menggunakan arraycopy()metode,

  • System.arraycopy(n1, 0, n2, 0, n1.length) - seluruh elemen dari larik n1 disalin ke larik n2
  • System.arraycopy(n1, 2, n3, 1, 2) - 2 elemen larik n1 mulai dari indeks 2 disalin ke indeks mulai dari 1 larik n3

Seperti yang Anda lihat, nilai awal default elemen array tipe int adalah 0.

4. Menyalin Array Menggunakan metode copyOfRange ()

We can also use the copyOfRange() method defined in Java Arrays class to copy arrays. For example,

 // To use toString() and copyOfRange() method import java.util.Arrays; class ArraysCopy ( public static void main(String() args) ( int() source = (2, 3, 12, 4, 12, -2); // copying entire source array to destination int() destination1 = Arrays.copyOfRange(source, 0, source.length); System.out.println("destination1 = " + Arrays.toString(destination1)); // copying from index 2 to 5 (5 is not included) int() destination2 = Arrays.copyOfRange(source, 2, 5); System.out.println("destination2 = " + Arrays.toString(destination2)); ) )

Output

 destination1 = (2, 3, 12, 4, 12, -2) destination2 = (12, 4, 12)

In the above example, notice the line,

 int() destination1 = Arrays.copyOfRange(source, 0, source.length);

Here, we can see that we are creating the destination1 array and copying the source array to it at the same time. We are not creating the destination1 array before calling the copyOfRange() method. To learn more about the method, visit Java copyOfRange.

5. Copying 2d Arrays Using Loop

Similar to the single-dimensional array, we can also copy the 2-dimensional array using the for loop. For example,

 import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < destination.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); for (int j = 0; j < destination(i).length; ++j) ( destination(i)(j) = source(i)(j); ) ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )

Output:

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

In the above program, notice the line,

 System.out.println(Arrays.deepToString(destination);

Di sini, deepToString()metode tersebut digunakan untuk memberikan representasi yang lebih baik dari larik 2 dimensi. Untuk mempelajari lebih lanjut, kunjungi Java deepToString ().

Menyalin Array 2d menggunakan arraycopy ()

Untuk membuat kode di atas lebih sederhana, kita dapat mengganti loop dalam dengan System.arraycopy()seperti pada kasus array berdimensi tunggal. Sebagai contoh,

 import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < source.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); System.arraycopy(source(i), 0, destination(i), 0, destination(i).length); ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )

Keluaran :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

Di sini, kita dapat melihat bahwa kita mendapatkan output yang sama dengan mengganti forloop dalam dengan arraycopy()metode tersebut.

Artikel yang menarik...