Java Copy Arrays (Menggunakan sistem arraycopy (), Looping konstruk dan sebagainya)

Dalam tutorial ini, anda akan belajar tentang pelbagai cara yang boleh anda gunakan untuk menyalin tatasusunan (baik satu dimensi dan dua dimensi) di Java dengan bantuan contoh.

Di Jawa, kita dapat menyalin satu array ke yang lain. Terdapat beberapa teknik yang boleh anda gunakan untuk menyalin array di Java.

1. Menyalin Susunan Menggunakan Operator Tugasan

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 penugasan ( =) untuk menyalin array bernama nombor ke array lain bernama positiveNumbers.

Teknik ini adalah yang paling mudah dan berfungsi juga. Walau bagaimanapun, terdapat masalah dengan teknik ini. Sekiranya kita mengubah elemen satu susunan, unsur-unsur yang sama dari tatasusunan yang lain juga akan 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 bahawa kita telah menukar satu nilai dari susunan nombor. Apabila kita mencetak array bilangan positif, kita dapat melihat bahawa nilai yang sama juga berubah.

Ini kerana kedua-dua tatasusunan merujuk pada objek array yang sama. Ini kerana salinan cetek. Untuk mengetahui lebih lanjut mengenai salinan cetek, lawati salinan cetek.

Sekarang, untuk membuat objek array baru sambil menyalin tatasusunan, kita memerlukan salinan mendalam dan bukan salinan cetek.

2. Menggunakan Looping Construct untuk Menyalin Susunan

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 forgelung untuk mengulangi setiap elemen array sumber. Dalam setiap lelaran, kami menyalin elemen dari array sumber ke array tujuan.

Di sini, susunan sumber dan tujuan merujuk kepada objek yang berbeza (salinan dalam). Oleh itu, jika elemen satu array diubah, elemen yang sesuai dari array yang lain tidak akan berubah.

Perhatikan kenyataannya,

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

Di sini, kaedah toString () digunakan untuk menukar array menjadi rentetan. Untuk mengetahui lebih lanjut, lawati kaedah toString () (dokumentasi Java rasmi).

3. Menyalin Susunan Menggunakan kaedah arraycopy ()

Di Jawa, kelas Sistem berisi kaedah yang dinamakan arraycopy()untuk menyalin tatasusunan. Kaedah ini adalah pendekatan yang lebih baik untuk menyalin tatasusunan daripada kedua di atas.

The arraycopy()kaedah membolehkan anda untuk menyalin bahagian yang ditetapkan array sumber kepada pelbagai destinasi. Sebagai contoh,

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

Di sini,

  • src - array sumber yang ingin anda salin
  • srcPos - kedudukan permulaan (indeks) dalam array sumber
  • dest - array tujuan di mana elemen akan disalin dari sumbernya
  • destPos - kedudukan permulaan (indeks) dalam array tujuan
  • panjang - bilangan 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()kaedah,

  • System.arraycopy(n1, 0, n2, 0, n1.length) - keseluruhan elemen dari array n1 disalin ke array n2
  • System.arraycopy(n1, 2, n3, 1, 2) - 2 elemen array n1 bermula dari indeks 2 disalin ke indeks bermula dari 1 dari array n3

Seperti yang anda lihat, nilai awal lalai bagi elemen array jenis int adalah 0.

4. Menyalin Susunan Menggunakan kaedah copyOfRange ()

Kita juga dapat menggunakan kaedah copyOfRange () yang ditentukan dalam kelas Java Arrays untuk menyalin array. Sebagai contoh,

 // 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)); ) )

Pengeluaran

 destinasi1 = (2, 3, 12, 4, 12, -2) destinasi2 = (12, 4, 12)

Dalam contoh di atas, perhatikan garis,

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

Di sini, kita dapat melihat bahawa kita membuat array tujuan1 dan menyalin array sumber kepadanya pada masa yang sama. Kami tidak membuat array tujuan1 sebelum memanggil copyOfRange()kaedah. Untuk mengetahui lebih lanjut mengenai kaedah ini, kunjungi Java copyOfRange.

5. Menyalin Susunan 2d Menggunakan Gelung

Sama dengan susunan dimensi tunggal, kita juga dapat menyalin susunan 2 dimensi menggunakan forgelung. 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 < 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)); ) )

Keluaran :

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

Dalam program di atas, perhatikan garis,

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

Di sini, deepToString()kaedah ini digunakan untuk memberikan gambaran yang lebih baik bagi susunan 2 dimensi. Untuk mengetahui lebih lanjut, lawati Java deepToString ().

Menyalin Array 2d menggunakan arraycopy ()

Untuk menjadikan kod di atas lebih mudah, kita boleh mengganti gelung dalam dengan System.arraycopy()seperti susunan satu dimensi. 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 bahawa kita mendapat output yang sama dengan mengganti forgelung dalam dengan arraycopy()kaedah.

Artikel menarik...